2013-10-07 2 views
6

ArrayList의 마지막 요소에서 마지막까지 반복 할 수 있는지 궁금합니다. 그렇다면 어떻게해야할까요? 나는 목록에 추가 된 마지막 요소를 제거 할 필요가 있기 때문에 그 이유는ArrayList를 마지막부터 처음 반복하는 방법은 무엇입니까?

그냥 배열 목록의 마지막 요소를 제거해야하는 경우
+3

이유는()하지 방금'list.remove (는 list.size을 - 1)'? –

+1

List의 API 문서를 살펴 보는 것은 어떻습니까? 문서의 "iterator"를 찾는 것이 도움이 될 것입니다. –

+0

공정한 그러나 내가 물어 보는 이유는 foreach를 사용하면서 문제가 발생하여 while 및 hasNext 반복자를 사용하도록 코드를 변경했기 때문에 내 코드를 좀 더 견고하게 바꾸고 싶었 기 때문입니다. –

답변

16

당신은 항상이

List<String> myList = new ArrayList<String>(); 
... add code to populate the list with some data... 
for (int i = myList.size() - 1 ; i >= 0 ; i--) { 
    if (myList.get(i).equals("delete me")) { 
     myList.remove(i); 
    } 
} 

처럼 인덱스를 사용하여 ArrayList을 반복 할 수 있지만 당신은 당신의 ArrayList에서 삭제 항목의 목적으로 ListIterator<T>를 사용하여 더 나을 것 :

ListIterator<String> listIter = myList.listIterator(); 
while (listIter.hasNext()) { 
    if (listIter.next().equals("delete me")) { 
     listIter.remove(); 
    } 
} 

목록 반복기를 사용하면 다음과 같이 목록을 역방향으로 반복 할 수도 있습니다.

ListIterator<String> listIter = myList.listIterator(myList.size()); 
while (listIter.hasPrevious()) { 
    String prev = listIter.previous(); 
    // Do something with prev here 
} 

반복기의 초기 색인은 마지막 요소 + 1의 색인과 같아야합니다. docs은 "previous에 대한 초기 호출은 지정된 색인 빼기 1의 요소를 반환합니다."라고 말합니다.

+0

하지만이 옵션은 처음부터 끝까지 적용되지 않습니까? 가장 좋은 방법으로 가능한 한 처음부터 요소를 제거해야합니다. 오류 발생 가능성이 적습니다. –

+0

@RicardoSanchez에 대한 의견이 1 분 전에 마지막 요소를 제거하는 1 개의 라이너로 게시되었습니다. 그게 충분하지 않으면 아마도 당신의 요구 사항을 날카롭게해야합니다 – Cruncher

+1

"-1"없이 listIterator() 메서드 내에서 마지막 코드가 작동했습니다 : "myList.listIterator (myList.size());" "-1"을 사용하여 중재에서 어미에서 두 번째 부분부터 시작하여 최신 항목을 무시하고있었습니다. – mizerablebr

1

, 당신이 단지 수 :

arrayList.remove(arrayList.size()-1); 

제거하고 싶었다면 전면 후면에서 모든 요소, 당신은 루프를 위해 이것을 사용할 수 있습니다 배열 목록에 대한 자세한 정보]를 들어

for(int i = arraList.size()-1; i >= 0; i--) 
{ 
     arrayList.remove(i); 
} 

, 당신은 여기 수 있습니다 http://www.tutorialspoint.com/java/java_arraylist_class.htm

홉 이것은 도움이됩니다.

7

여기 그것을 할 한 가지 방법입니다 (이유는 왜 별도의 질문) :

import java.util.*; 

List<String> list = new ArrayList<String>(); 
list.add("a"); 
list.add("b"); 
list.add("c"); 

ListIterator<String> iter = list.listIterator(list.size()); 

while (iter.hasPrevious()) { 
    String s = iter.previous(); 
    System.out.println(s); 
} 
0
ArrayList aList = new ArrayList(); 
aList.add(1); 
aList.add(2); 
aList.add(3); 

Collections.reverse(aList); 

Iterator iter = aList.iterator(); 
while(iter.hasNext()){ 
    iter.next(); 
    iter.remove();//remove an element 
    break;//break from the loop or something else 
} 
+0

끝에서 시작까지 반복하지 않습니다. 컬렉션을 뒤집은 다음 처음부터 반복합니다. 그것은 파괴적 일뿐만 아니라 매우 비효율적입니다. –

0
List<String> names = .... 
int count= names.getSize(); 
Iterator<String> i = names.iterator(); 
while (i.hasNext()) { 
    String s = i.next(); // must be called before you can call i.remove() 
    // Do something 
    if (count==1) 
     i.remove(); 
    count--; 
} 
관련 문제