为什么indexOf无法找到对象?

时间:2012-04-02 18:31:56

标签: java indexof

我创建了一个整数列表,并尝试返回特定值的索引。 数组是3,8,2,5,1,4,7,6,我想返回indexOf(3),它应该是0。

导入java.util后,我在Eclipse Java Scrapbook中尝试了以下内容。*:

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。为什么?如何让它按预期工作?

3 个答案:

答案 0 :(得分:34)

Arrays.asList(A)返回List<int[]>。这是因为它需要一个对象数组,而不是基本类型。您的选择包括:

  • 使用Integer[]代替int[]
  • 内联阵列,让自动装箱处理它; Arrays.asList(3,8,2,5,1,4,7,9)可以正常使用
  • 使用Guava's Ints.asList(int...)方法将基元数组视为List<Integer>。 (披露:我向Guava捐款。)
  • 使用Guava的Ints.indexOf(int[], int),它直接用于原始数组。

答案 1 :(得分:26)

为了使其正常工作,它应该是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'

答案 2 :(得分:2)

这样做

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 [])。