Java Iterator remove() 메서드

Shubham Vora 2023년10월12일
  1. Collectionremove() 메서드 소개
  2. 수집제거() 메서드 사용
  3. Iteratorremove() 메서드 소개
  4. Iteratorremove() 메서드 사용
Java Iterator remove() 메서드

Java 개발자는 반복하는 동안 종종 ArrayList에서 요소 또는 객체를 제거해야 합니다.

여기에서 문제는 ConcurrentModificationException을 발생시키면서 반복하면서 원래 컬렉션에서 개체를 제거하려고 할 때 발생합니다. 이 기사에서는 Iteratorremove() 메서드와 Collectionremove() 메서드가 어떻게 다르게 작동하는지 알아봅니다.

Collectionremove() 메서드 소개

Java에서 CollectionArrayList, Set 등과 같은 다양한 데이터 유형을 포함하는 인터페이스입니다. Collection에서 요소를 제거하려면 컬렉션을 가져와 remove() 메서드를 사용할 수 있습니다. 참조로.

사용자는 컬렉션과 함께 remove() 메서드를 사용하기 위해 아래 구문을 따를 수 있습니다.

collection.remove(Ind);

Ind - remove() 메서드는 참조된 컬렉션Ind 인덱스에서 요소를 제거합니다.

수집제거() 메서드 사용

아래 예제에서는 collectionremove() 메소드를 사용하여 컬렉션을 생성하고 2번째 및 4번째 인덱스에서 요소를 제거했습니다.

import java.util.ArrayList;
class Test {
  public static void main(String[] args) {
    // Create an ArrayList
    ArrayList<String> testList = new ArrayList<String>();
    // Add elements in the ArrayList
    testList.add("Apple");
    testList.add("Banana");
    testList.add("Cat");
    testList.add("Dog");
    testList.add("Fox");
    testList.add("Cow");
    // Removing the element at index 2 and 4
    System.out.println(testList.remove(2) + " removed\n");
    System.out.println(testList.remove(4) + " removed");
  }
}

출력:

Cat removed
Cow removed

위 출력에서 사용자는 두 번째 인덱스에서 cat을 제거하면 ArrayList의 모든 요소가 하나의 인덱스만큼 이동하는 것을 볼 수 있습니다.

2번째 인덱스에서 요소를 제거한 후 4번째 인덱스에서 해당 요소를 제거하려고 하면 remove() 메소드가 실제 ArrayList의 5번째 인덱스에서 요소를 제거하므로 2번째 인덱스 이후의 모든 요소가 1로 남았습니다.

Collectionremove() 메서드가 정상적으로 작동하는 방식을 배웠습니다.

Iteratorremove() 메서드 소개

이제 문제는 IteratorCollectionremove() 메소드가 Collection에서 요소를 제거하므로 차이점이 무엇입니까?

아래 코드를 사용하여 문제를 이해해 봅시다.

import java.util.ArrayList;
class Test {
  public static void main(String[] args) {
    // Create an ArrayList
    ArrayList<String> testList = new ArrayList<String>();
    // Add elements in the ArrayList
    testList.add("Apple");
    testList.add("Banana");
    testList.add("Cat");
    testList.add("Dog");
    testList.add("Fox");
    testList.add("Cow");
    for (String element : testList) {
      if (element.equals("Cat")) {
        testList.remove(element);
      }
    }
  }
}

위의 예에서는 다른 문자열의 ArrayList를 만들었습니다. for 루프를 사용하여 ArrayList를 반복하고 요소가 cat과 같은지 확인하고 collection.remove() 메서드를 사용하여 제거하려고 시도합니다.

출력에서 사용자는 원래 목록을 반복하면서 수정할 때 ConcurrentModificationException 예외를 throw하는 것을 볼 수 있습니다.

출력:

Exception in thread "main" java.util.ConcurrentModificationException

문제를 해결하기 위해 iterator를 사용하여 ArrayList를 반복하고 Iteratorremove() 메서드를 사용하여 요소를 제거할 수 있습니다.

Iteratorremove() 메서드 사용

아래 예에서는 문자열의 ArrayList에 대한 반복자 이름 itr을 만들었습니다. for 루프와 itr을 사용하여 ArrayList를 반복합니다.

또한 반복하는 동안 ArrayList에서 Fox 요소를 제거합니다.

import java.util.ArrayList;
import java.util.Iterator;

class Test {
  public static void main(String[] args) {
    // Create an ArrayList
    ArrayList<String> testList = new ArrayList<String>();
    // Add elements in the ArrayList
    testList.add("Apple");
    testList.add("Banana");
    testList.add("Cat");
    testList.add("Dog");
    testList.add("Fox");
    testList.add("Cow");
    // Removing the "Fox" while iterating through the `testList`
    Iterator<String> itr = testList.iterator();
    while (itr.hasNext()) {
      String element = itr.next();
      if (element.equals("Fox")) {
        testList.remove(element);
      }
    }
    System.out.println(testList);
  }
}

출력:

[Apple, Banana, Cat, Dog, Cow]

위 출력에서 ArrayList를 반복하는 동안 Fox가 제거되는 것을 관찰할 수 있습니다.

Iteratorremove() 메서드 코드 이해

Java의 공식 문서에서 iteratorremove() 메서드에 대한 아래 의사 코드를 가져왔습니다. 사용자는 ArrayListremove() 메서드도 사용하지만 ConcurrentModificationException 예외를 throw하지 않는 expectedModCount를 업데이트한다는 것을 알 수 있습니다.

ArrayList를 반복할 때 항상 다음 요소를 알아야 합니다. 따라서 remove() 메서드를 사용하여 원래 목록을 수정하려고 하면 다음 인덱스를 업데이트하지 않고 오류가 발생하며 그 문제는 iteratorremove() 메서드에서 극복됩니다.

try {
  ArrayList.this.remove(lastRet);
  cursor = lastRet;
  lastRet = -1;
  expectedModCount = modCount;
} catch (IndexOutOfBoundsException ex) {
  throw new ConcurrentModificationException();
}

또한 사용자는 목록을 복제하고 새 목록을 반복할 수 있습니다. 새 목록을 반복하면서 원래 목록에서 요소를 제거할 수 있습니다.

작가: Shubham Vora
Shubham Vora avatar Shubham Vora avatar

Shubham is a software developer interested in learning and writing about various technologies. He loves to help people by sharing vast knowledge about modern technologies via different platforms such as the DelftStack.com website.

LinkedIn GitHub

관련 문장 - Java Iterator