Java/자바 정리

142. HashSet에서 요소를 안전하게 제거하는 방법 – Iterator 활용

코딩하는냥이 2025. 5. 20. 12:55
반응형

HashSet은 중복을 허용하지 않는 집합(Set) 구조로,
순서 없이 데이터를 저장하며, Iterator를 통해 순차 접근할 수 있습니다.
특히, 반복 중에 요소를 삭제할 때는 반드시 Iterator.remove()를 사용해야 안전하게 처리할 수 있습니다.
이번 예제에서는 HashSet에 저장된 문자열을 반복하며 특정 요소를 제거하는 방법을 확인합니다.


📌 예제 코드

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class HashSetExample {
	public static void main(String[] args) {
		Set<String> set = new HashSet<String>();
		
		set.add("Java");
		set.add("JDBC");
		set.add("JSP");
		set.add("Spring");

		// Iterator로 전체 요소 순회
		Iterator<String> iterator = set.iterator();
		while (iterator.hasNext()) {
			String element = iterator.next();
			System.out.println(element);
			if (element.equals("JSP"))
				iterator.remove();  // 안전한 삭제
		}
		System.out.println();
		
		// remove() 메서드로 직접 제거
		set.remove("JDBC");
		
		for (String element : set)
			System.out.println(element);
	}
}

💻 실행 결과

Java
Spring
JSP
JDBC

Java
Spring

※ 출력 순서는 HashSet의 특성상 실행 시마다 달라질 수 있습니다.


💬 코드 설명

  • HashSet에 "Java", "JDBC", "JSP", "Spring"을 저장합니다.
  • iterator() 메서드를 사용하여 모든 요소를 순차 접근하며, "JSP"와 일치하는 요소는 iterator.remove()로 삭제합니다.
  • 반복문 도중 직접 set.remove("JSP")를 호출하면 ConcurrentModificationException이 발생할 수 있지만,
    iterator.remove()는 현재 접근 중인 요소를 안전하게 제거할 수 있는 공식적인 방법입니다.
  • 이후 "JDBC"는 set.remove()로 별도로 제거하며,
    남은 "Java"와 "Spring"만 최종 출력됩니다.

💡 포인트 정리

  • HashSet은 순서 없이 저장되며, 중복 요소를 허용하지 않는 컬렉션입니다.
  • 반복 도중 요소를 삭제하려면 반드시 Iterator.remove()를 사용해야 합니다.
  • for-each 반복문에서는 remove() 사용이 불가능하므로, 삭제가 필요하다면 Iterator를 사용해야 합니다.
  • set.remove(값)은 특정 요소를 직접 제거할 때 사용합니다.

📌정리하자면, HashSet에서 반복 중 요소를 삭제하려면 반드시 Iterator.remove()를 사용해야 예외 없이 안정적으로 처리할 수 있습니다.
이번 예제를 통해 HashSet의 순차 접근과 안전한 삭제 방법을 함께 익힐 수 있었습니다.
데이터 삭제가 필요한 경우에는 반복 구조에 따라 적절한 방법을 선택하는 것이 중요합니다.