2012-12-02 3 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

foreach 루프라고도하는 enhanced for loop을 사용하고 있습니다. 이 루프에는 인덱스 변수가 루프 내에 정의되어 있지 않습니다. 이것은 단순히 배열/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 (1) 대신 O (N)입니다. –

+0

이것은 가장 합리적인 것 같습니다. 그러나 나는 for-each 루프를 사용하는 것을 선호 할 것 같다. 나는이 경우에 인덱스를 추적하지 않기로 결정했다. 다음에 나는 for 루프를 대신 구현할 것이다. 감사. – binary101

1

당신은 index를 얻을 수 indexOf(object)를 사용해야합니다.

java5 이상을 사용한다고 가정합니다. 그렇지 않은 경우는, 원시적 인 int 대신에 Integer 오브젝트를 작성할 필요가 있습니다.

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

나는 또한 이것을 초기에 시도했지만 arraylist의 arraylists 내의 요소 색인을 추적한다. 정렬/그룹화되기 전의 인덱스 초기 설정이 아닙니다 ... – binary101