2012-04-02 99 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 [])。

相關問題