반복 중 컬렉션 수정: 종합 가이드
ConcurrentModificationException과 같은 오류를 방지하기 위해 반복 중에 컬렉션을 효과적으로 수정하려면 고려해야 할 몇 가지 전략이 있습니다. :
수집하고 제거
이 방법에는 향상된 for 루프 중에 제거할 객체를 수집한 다음 반복이 완료된 후 제거하는 방법이 포함됩니다. 이 기술은 삭제가 주요 목표인 시나리오에서 특히 유용합니다.
List<Book> books = new ArrayList<>(); ISBN isbn = new ISBN("0-201-63361-2"); List<Book> found = new ArrayList<>(); for (Book book : books) { if (book.getIsbn().equals(isbn)) { found.add(book); } } books.removeAll(found);
ListIterator 사용
ListIterator는 반복 중에 항목 제거 및 추가를 모두 지원합니다. 이는 목록을 수정할 때 적합한 선택입니다.
List<Book> books = new ArrayList<>(); ISBN isbn = new ISBN("0-201-63361-2"); ListIterator<Book> iter = books.listIterator(); while (iter.hasNext()) { if (iter.next().getIsbn().equals(isbn)) { iter.remove(); } }
JDK >= 8
Java 8에서는 컬렉션 수정을 위한 추가 방법을 도입합니다.
List<Book> books = new ArrayList<>(); ISBN isbn = new ISBN("0-201-63361-2"); books.removeIf(book -> book.getIsbn().equals(isbn));
List<Book> books = new ArrayList<>(); ISBN isbn = new ISBN("0-201-63361-2"); List<Book> filtered = books.stream() .filter(book -> book.getIsbn().equals(isbn)) .collect(Collectors.toList());
하위 목록 또는 하위 집합
정렬된 목록의 경우 하위 목록을 사용하여 연속 요소를 효율적으로 제거할 수 있습니다.
List<Book> books = new ArrayList<>(); books.subList(0, 5).clear();
고려 사항
수정 선택 방법은 특정 시나리오 및 컬렉션 유형에 따라 다릅니다. 다음은 몇 가지 주요 고려 사항입니다.
위 내용은 Java에서 반복하는 동안 컬렉션을 안전하게 수정하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!