2012-04-12 3 views
1

私はリスト内のアイテムの頻度を取得する方法を把握しようとしています。私はこの問題にアプローチするとき、私は一般的に、過去に、やった:リスト<Integer>ではなくint []内のアイテムの頻度?

int occurrences = Collections.frequency(list, 0); 

私のリストがList<Integer> listあるときそれは動作します。 int[] listを使用している場合、これを行う方法はありますか?コレクションをしようとするとリストが変換され、コードが壊れます。私は必要に応じてコードを変換することができますが、代わりにint []から周波数を取得する方法があれば不思議に思っていました。

+2

:)それがために、loop' ... –

+0

@userunknown申し訳ありませんが、それをテストしながら、私は疑問を構成して、私の考えが混ざってしまった1 'です。私はそれを修正したと思う、それについて残念。寝る時間があるというサインかもしれません。 –

答えて

2

独自の線形時間frequencyメソッドを書くことができます。または、(2)ボックス化されたint型の配列に変換し、でArrays.asListを使用できます。

int[] arr = {1, 2, 3}; 
Integer[] boxedArr = new Integer[arr.length]; 
for(int i = 0; i < arr.length; i++) 
    boxedArr[i] = arr[i]; 
System.out.println(Collections.frequency(Arrays.asList(boxedArr), 1)); 
+0

それは完璧に働いてくれてありがとう。 –

+0

私は[新しい質問](http://stackoverflow.com/q/10133584/422353)から、これは基本的に 'int'の配列なので、最後にはうまくいかなかったと思います。 – madth3

+0

@ madth3:ヘッドアップありがとう。 – blackcompe

2

あなたはint[]からListを作成することもできますが、それ以外、あなたは自分自身を記述する必要があります。

int[] l = //your data; 
List<Integer> list = new List<Integer>(); 
for(int i : l) 
    list.add(i); 

int o = Collections.frequency(list, 0); 

またはArrays.asList(l);これを短くする。

2
int occurrences = Collections.frequency(Arrays.asList(list), 0); 

それともリストに変換反対している場合:

int occurrences = 0; 
for (int i = 0; i < list.length; i++) 
{ 
    if(list[i] == X) // X being your number to check 
     occurrences++; 
} 
+0

'asList'の使用は、オブジェクトではなくプリミティブの配列なので動作しませんが、新しいオブジェクトを構築する必要がないので、カウントは使い方です。 – madth3

1

あなたにもこの方法を行うことができます。独自の関数を書くことで

List<Integer> intList = Arrays.asList(new Integer [] { 
     2, 3, 4, 5, 6, 
     2, 3, 4, 5, 
     2, 3, 4, 
     2, 3, 
     2 
    }); 

    System.out.println(" count " + Collections.frequency(intList, 6)); 
関連する問題