Set.remove

Set에서 원소를 삭제하고, 삭제 여부를 boolean으로 반환합니다.

시그니처

boolean remove(Object o)
반환값의미
true원소가 있어서 삭제됨
false원소가 없어서 변화 없음

동작 추적

Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("grape");
[ 초기 상태 ]
set: [apple, banana, grape]

존재하는 원소 삭제

boolean removed = set.remove("apple");
// removed = true
[ 변경 후 ]
set: [banana, grape]

없는 원소 삭제 시도

boolean removed = set.remove("orange");
// removed = false
[ 변경 후 ]
set: [banana, grape]   ← 변화 없음

자주 쓰는 패턴

처리한 항목 제거 (방문 처리)

Set<Integer> remaining = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));
[ 초기 상태 ]
remaining: [1, 2, 3, 4, 5]
int[] processed = {2, 4};
for (int n : processed) {
    remaining.remove(n);
}
[ 단계별 추적 ]

remove(2) → true   →  remaining: [1, 3, 4, 5]
remove(4) → true   →  remaining: [1, 3, 5]

순회 중 안전한 삭제

// X for-each 중 set.remove → ConcurrentModificationException
for (String s : set) {
    if (조건) set.remove(s);   // 예외 발생
}

// O Iterator의 remove()
Iterator<String> it = set.iterator();
while (it.hasNext()) {
    String s = it.next();
    if (조건) it.remove();
}

// O Java 8+ removeIf — 가장 깔끔
set.removeIf(s -> 조건);
[ removeIf 동작 추적 ]

[ 초기 ]
set: [apple, banana, cherry, durian]

set.removeIf(s -> s.startsWith("c"));

[ 변경 후 ]
set: [apple, banana, durian]   ← cherry 일괄 삭제

clear() — 전체 삭제

set.clear();
[ 변경 후 ]
set: [ ]   ← 모든 원소 삭제

시간복잡도

평균최악
O(1)O(n) / O(log n) (Java 8+ 트리화)

CSLOG에서 보기