프로젝트 개발에서는 종종 배열 목록에서 일부 요소를 동적으로 삭제해야 할 수도 있습니다.
잘못된 방법 :
<pre name = "code"> for (int i = 0, len = list.size (); i <len; ++ i) {if (list.get (i) == xxx) {list.remove (i); }}위의 방법은 다음과 같은 예외를 던집니다.
스레드의 예외 "main"java.lang.indexoutofboundsexception : index : 3, size : 3 at java.util.arraylist.rangecheck (java.util.arraylist.get (unknown source) (listdemo.java:20)의 java.util.arraylist.get (알 수없는 소스).
요소를 삭제했지만 반복 위시를 변경하지 않았으므로 반복이 마지막에 도달하면 예외가 발생합니다.
위의 프로그램은 다음과 같이 향상 될 수 있습니다.
for (int i = 0, len = list.size (); i <len; ++ i) {if (list.get (i) == xxx) {list.remove (i); ---len; // one}}}}위의 코드가 정확합니다.
다른 솔루션을 소개하겠습니다.
목록 인터페이스는 반복자 인터페이스를 내부적으로 구현하여 개발자에게 iterator ()를 제공하여 현재 목록 객체의 반복자 개체를 가져옵니다.
iterator <string> slistiterator = list.iterator (); while (slistiterator.hasnext ()) {string e = slistiterator.next (); if (e.equals ( "3")) {slistiterator.remove (); }}위의 내용도 정확하며 두 번째 솔루션이 권장됩니다.
두 솔루션의 구현 원리는 거의 동일하며 두 번째 솔루션은 JDK에 의해 캡슐화됩니다.
ArrayList 소스 코드를 볼 때 많은 방법이 반복자 인터페이스를 기반으로 내부적으로 구현되므로 두 번째 솔루션을 권장합니다.
위는 Java Collection Arraylist 루프에서 특정 요소를 삭제하는 메소드의 전체 내용입니다. 모두가 wulin.com을 지원하기를 바랍니다