2012-04-02 117 views
24

我创建了一个整数列表,并试图返回特定值的索引。 数组是3,8,2,5,1,4,7,6,我想返回indexOf(3),应该是0.为什么indexOf无法找到对象?

我在Eclipse Java Scrapbook中试过以下导入后的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。为什么?如何让这个按预期工作?

+0

谢谢大家的回答。虽然我不得不改变数据结构,但是我将使用binarySearch方法,因为它可以在int []数组上工作。 – rishimaharaj 2012-04-03 15:14:08

+2

只是要警告,这只会对_sorted_'int []'数组起作用,你所描述的例子不是。 – 2012-04-03 16:35:40

+0

@LouisWasserman我没有得到你的评论和它得到的赞扬。 'indexOf'“返回此列表中第一次出现指定元素的索引,如果此列表不包含元素,则返回-1。 - 为什么它不适用于任意数组? – arekolek 2017-04-26 10:52:21

回答

20

它应该是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' 
30

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),它直接在原始数组上工作。
1

做这种方式

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