web-dev-qa-db-ja.com

indexOfがオブジェクトを見つけられないのはなぜですか?

整数リストを作成し、特定の値のインデックスを返そうとしています。配列は3,8,2,5,1,4,7,6であり、indexOf(3)を返したいのですが、これは0である必要があります。

私はEclipseで次のことを試しましたJava Java.util。*をインポートした後のスクラップブック:

int[] A = {3,8,2,5,1,4,7,9};
Arrays.asList(A).indexOf(3)

私も試しました:

int[] A = {3,8,2,5,1,4,7,6};
ArrayList<Integer> l = new ArrayList(Arrays.asList(A));
l.indexOf(3)

どちらも-1を返しています。どうして?これを期待どおりに機能させる方法は?

32
rishimaharaj

そのはず Integer[]ではないint[]それを機能させるために。

Integer[] A = {3,8,2,5,1,4,7,9};
final int i = Arrays.asList(A).indexOf(3);
System.out.println("i = " + i); // prints '0'
26
Eugene Retunsky

Arrays.asList(A)は、_List<int[]>_を返します。これは、プリミティブ型ではなく、オブジェクトの配列を想定しているためです。オプションは次のとおりです。

  • _Integer[]_の代わりに_int[]_を使用
  • 配列をインライン化し、オートボクシングに処理させます。 Arrays.asList(3,8,2,5,1,4,7,9)は正常に機能します
  • Guava'sInts.asList(int...) メソッドを使用して、プリミティブ配列を_List<Integer>_として表示します。 (開示:私はグアバに貢献します。)
  • guavaのInts.indexOf(int[], int)を使用します。これは、プリミティブ配列で直接機能します。
34
Louis Wasserman

このようにしてください

Integer[] array = {3,8,2,5,1,4,7,9};
List<Integer> list = Arrays.asList(array);

System.out.println(list.indexOf(8));

asListはstatic <T> List<T>を返します。ここで、Tはプリミティブ(int [])にすることはできません。

2