2012-12-02 77 views
1

如何找到存儲在ArrayList中的int的索引?ArrayList索引?

public static void thisClass(int max, int[] queue1, ArrayList<ArrayList<Integer>> aList) { 

    int[] anArr = Arrays.copyOf(queue1, queue1.length); 
    Arrays.sort(anArr); 

    ... //sorts ints into groups (ArrayList of ArrayLists) 

    } 

    int n = 0; 
    for (ArrayList<Integer> t : newList) { 
     String itemS = ""; 
     int total = 0; 
     for (int index : t) { 
      int value = index; //isn't returning index of arrayList - its returning the value 
      if (!itemS.isEmpty()) { 
       itemS += ", "; 
      } 
      itemS += index + ":" + value; //want it to output "element Position : element Value 
      total += value; 
     } 
    } 
} 

回答

3

您正在使用enhanced for loop,也稱爲foreach循環。在這個循環中,在循環中沒有定義索引變量;它只是數組/ Iterable本身中的值。

要獲得索引,你必須使用傳統的for循環:

ArrayList<Integer> myNumbers = new ArrayList<>(); 
myNumbers.add(123); 
myNumbers.add(456); 
myNumbers.add(789); 

for(int i = 0; i < myNumbers.size(); i++) { 
    int value = myNumbers.get(i); 
    if(value == 789) { 
     System.out.println("Found 789 at index " + i); 
     break; 
    } 
} 
+0

+1。或者他可以初始化一個變量爲0並在每次迭代時增加它,這對LinkedList來說更好,其中'get()'是O(N)而不是O(1)。 –

+0

這似乎是最有意義的。但似乎我寧願使用'for-each loop',我只是決定不在這個時候跟蹤索引。下次我將確保實現一個'for循環'而不是。謝謝。 – binary101

1

您需要使用indexOf(object)得到index

假設您使用的是大於java5。否則,你需要創建一個Integer對象,而不是原始的int。

Enhanced for循環在內部使用迭代器,因此您無法獲取索引。

1

-使用indexOf()方法來解決這個.......

for (ArrayList<Integer> t : newList){ 

     int index = newList.indexOf(t); 

     System.out.println(index);  // Use an array or list to store these 
             // index if you want. 


} 
+0

我也早些時候嘗試過,但是會跟蹤數組列表的數組元素的索引。在排序/分組之前,不是最初的一組索引... – binary101