목록에서 요소를 가로 지르고 삭제하는 방법에는 여러 가지가 있으며 부적절하게 사용하면 문제가 발생합니다. 목록에서 요소의 다음 형태의 트래버스 삭제를 살펴 보겠습니다.
1. 루프를위한 향상된 기준을 통해 기준을 충족하는 여러 요소를 제거하십시오.
2. 루프의 향상된 기준을 통해 기준을 충족하는 요소를 제거하십시오.
3. 삭제를 위해 평범한 조건을 충족하는 여러 요소 삭제
4. 반복자 조건을 충족하는 여러 요소를 가로 지르고 삭제합니다.
/ *** 루프에 대한 향상된 사용* 루프 중 목록에서 요소를 삭제 한 후 루프 목록을 계속할 때 ConcurrentModificationException*/ public void listremove () {list <tudent> 학생 = this.getStudents (); for (학생 stu : 학생) {if (stu.getId () == 2) 학생들 (stu); }} / *** 루프가 횡단 및 삭제 목록에 대한 향상된 강화를 사용하지만 삭제 직후에 팝업이 나타나면 예외는 나타나지 않습니다. for (학생 stu : 학생) {if (stu.getid () == 2) {whitsing.remove (stu); 부서지다; }}} /** * 이러한 종류의 횡단은 요소를 놓칠 수 있습니다. 요소를 삭제 한 후 목록의 크기가 *의 *가 변경되고 요소의 인덱스도 변경되기 때문입니다. 예를 들어, 두 번째 요소로 루프하면 삭제합니다. * 다음은 세 번째 요소를 방문하고 실제로 원래 네 번째 요소에 액세스합니다. 액세스 요소 * 인덱스가 현재 목록의 크기를 초과하면 배열 교차 국경을 제외하고 나타납니다. 물론,이 예외는 여기에 나타나지 않을 것입니다. * 당신이 그것을 통과 할 때마다, 현재 목록의 크기가 다시 가져옵니다. */ public void listremove2 () {list <tudent> 학생 = this.getStudents (); for (int i = 0; i <whitsing.size (); i ++) {if (whitsing.get (i) .getId ()%3 == 0) {Student Student = Student.get (i); 학생들 (학생); }}} / *** 반복자*/ public void iteratorremove () {list <tudent> 학생 = this.getStudents (); System.out.println (학생); Ierator <tudent> stuiter = whity.iterator (); while (stuiter.hasnext ()) {Student Student = stuiter.next (); if (student.getId () % 2 == 0) // 여기에서 반복자 제거 메소드를 사용하여 현재 객체를 제거해야합니다. 목록의 제거 메소드를 사용하는 경우 ConcurrentModificationException도 STUITER.REMOVE (); } system.out.println (학생); } import java.util.arraylist; import java.util.iterator; import java.util.list; public class listremove {public static void main (String args []) {listremove lr = new listremove (); lr.listremove (); lr.listremovebreak (); // lr.listremove2 (); // lr.iteratorremove (); } / *** 루프에 대한 향상된 사용* 루프 중 목록에서 요소를 삭제 한 후 루프 목록을 계속할 때 동시 모형화 값 이보고됩니다* / public void listremove () {list <tudent> whitdent = this.getStudents (); for (학생 stu : 학생) {if (stu.getId () == 2) 학생들 (stu); }} / *** 루프가 목록을 가로 지르고 삭제하기 위해 향상된 강화를 사용하지만 즉시 팝업되면 삭제 후 예외는 나타나지 않습니다. for (학생 stu : 학생) {if (stu.getid () == 2) {whitsing.remove (stu); 부서지다; }}}} /*** 이러한 종류의 상황은 루프 용으로 향상된 것을 사용하지 않으며, 실행 중에는 목록의 크기 트래버스가보고되지 않지만 삭제 결과는 잘못 될 수 있습니다. */ public void listremove2 () {list <tudent> 학생 = this.getStudents (); for (int i = 0; i <whitsing.size (); i ++) {if (whitsing.get (i) .getId ()%2 == 0) elod.remove (i); }} / *** 반복자* / public void iteratorremove () {list <tudent> 학생 = this.getStudents (); System.out.println (학생); Ierator <tudent> stuiter = whity.iterator (); while (stuiter.hasnext ()) {Student Student = stuiter.next (); if (student.getId () % 2 == 0) stuiter.remove (); } system.out.println (학생); } private list <guldent> getStudents () {list <tudent> 학생 = New ArrayList <student> () {{int i = 0; while (i ++ <10) {학생 학생 = 신입생 (I, "201200" + i, "name_" + i); this.add (학생); }}}; 반품 학생; }} 공개 수업 학생 {private int id; 개인 문자열 스튜노; 개인 문자열 이름; 공개 학생 () {} 공개 학생 (int id, String Stuno, String Name) {this.id = id; this.stuno = Stuno; this.name = 이름; } public int getId () {return id; } public void setid (int id) {this.id = id; } public String getStuno () {return stuno; } public void setstuno (String Stuno) {this.stuno = stuno; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } @override public String toString () {return "reptoy [id =" + id + ", name =" + name + ", stuno =" + stuno + "]; }}위의 기사는 목록에서 요소를 올바르게 통과하고 삭제하는 것 (권장)은 내가 공유하는 모든 컨텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.