반응형
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의 순차 접근과 안전한 삭제 방법을 함께 익힐 수 있었습니다.
데이터 삭제가 필요한 경우에는 반복 구조에 따라 적절한 방법을 선택하는 것이 중요합니다.
'Java > 자바 정리' 카테고리의 다른 글
145. TreeSet으로 정렬과 범위 검색하기 (0) | 2025.05.21 |
---|---|
144. 멀티스레드 환경에서도 안전한 Map – Hashtable 사용법 (0) | 2025.05.20 |
143. 키-값 쌍을 저장하는 HashMap – 중복 처리와 순회 방법 (0) | 2025.05.20 |
141. 사용자 정의 객체의 중복 비교 – hashCode()와 equals() 재정의 (0) | 2025.05.20 |
140. 중복을 허용하지 않는 Set – HashSet의 특징 (0) | 2025.05.20 |
139. ArrayList vs LinkedList 성능 비교 (0) | 2025.05.20 |