4

私は持っている

int myArray[]= {12,23,10,22,10}; 

だから私はループを繰り返さずに取得index of 23し たい( , ...) 。myArrayforwhile

私は次のようなことをしますArrays.asList(myArray).indexOf(23)

これは私にとってはうまくいきません。出力として取得-1します。

これはString[] Likeでの作業です

  String myArray[]= {"12","23","10","22","10"}; 
  Arrays.asList(myArray).indexOf("23")

では、なぜこれが機能しないのint[]ですか? ?

4

4 に答える 4

13
Integer myArray[]= {12,23,10,22,10};
System.out.println(Arrays.asList(myArray).indexOf(23)); 

問題を解決します

Arrays.asList(myArray).indexOf(23)オブジェクトに関するこの検索で​​は、プリミティブ型 であるintため、オブジェクト型を使用する必要があります。int

String myArray[]= {"12","23","10","22","10"}; 
Arrays.asList(myArray).indexOf("23");

2番目のケースでは、これStringはオブジェクトであるため機能します。

を定義するときList、それをList<String>またはとして定義しますList<Integer>。そのため、プリミティブは では使用されませんList。次にArrays.asList(myArray).indexOf("23")、同等のオブジェクトのインデックスを見つけます。

于 2013-08-12T05:00:43.497 に答える
4

私は Ruchira に同意し、問題がint原始的な whileStringでありInteger、実際のオブジェクトであるという事実に関係していることも指摘したいと思います。(これをコメントとして投稿したはずですが、評判が50になるまで投稿できません;))

于 2013-08-12T05:03:02.067 に答える
2

プリミティブの配列をボックス化されたプリミティブのリストに変換する場合は、Apache Commonsを利用してください。以下に示すように、リストを取得したら、List の API を使用して、インデックスでオブジェクトを検索します。

List<Integer> list = Arrays.asList(ArrayUtils.toObject(myArray));
于 2013-08-12T05:09:45.840 に答える
1

配列をソートしたままにして、バイナリ細分化を使用してインデックスを決定することを検討できます。この場合、挿入と検索は両方とも O(log(n)) になります (それぞれ O(1) と O(n) ではなく)。

多くの検索を行っている場合は、パフォーマンスのためだけでなく、書き込みが容易になるという理由から、ハッシュ マップなどの別のデータ構造を使用することをお勧めします。

于 2013-08-12T05:25:42.037 に答える