본문 바로가기
etc.

[Java/Python] 문법 비교 정리 #6 자료구조 - Set

by Lee David 2022. 11. 8.
반응형

Java에서의 Set

Set<Integer> a = new HashSet<>(Arrays.asList(1, 3, 2, 4, 8, 9, 0));
Set<Integer> b = new HashSet<>(Arrays.asList(1, 3, 7, 5, 4, 0, 7, 5));

// 합집합
Set<Integer> union = new HashSet<>(a);
union.addAll(b);
System.out.println(union); // 0, 1, 2, 3, 4, 5, 7, 8, 9

// 교집합
Set<Integer> intersection = new HashSet<>(a);
intersection.retainAll(b);
System.out.println(intersection); // 0, 1, 3, 4

// 차집합
Set<Integer> difference = new HashSet<>(a);
difference.removeAll(b);
System.out.println(difference); // 2, 8, 9

Set의 자료구조 특성상 중복된 값을 허용하지 않습니다.

그 외에도 두개의 Set 자료구조의 연산에 사용되는 addAll, retainAll, removeAll과 같은 메서드를 이용하면 쉽게 합집합, 교집합, 차집합등이 가능합니다.


Python에서의 Set

# 1. 직접 선언하기
a = {1,2,3,4,5}
b = {3,4,5,6,7}

# 2. 배열 사용하기
a = set([1,2,3,4,5])
b = set([3,4,5,6,7])

# 3. Str을 배열처럼 사용하기 - python 3부터 사용 가능합니다.
# Str의 경우 인자의 성격이 Str이 됩니다.
a = set('12345')
b = set('34567')

print(a - b) # {'1', '2'} - a엔 있고 b엔 없는 값
print(a | b) # {'3', '6', '1', '2', '5', '4', '7'} - 합집합
print(a & b) # {'3', '5', '4'} - 교집합
print(a ^ b) # {'1', '2', '6', '7'} - 차집합

java와는 다르게 set이 유연하게 사용 가능합니다.

List에서 Queue, Stack을 지원하지만 set은 List와 다르게 중괄호를 혹은 set() 함수를 사용해야 합니다.

메서드 설명 Exception 유무
add(e) e을 추가합니다. x
remove(e) e를 제거 합니다. o
discard(e) e가 포함되어 있으면 제거합니다. x
pop() 임의의 원소를 제거합니다.
(set은 집합의 순서를 보장하지 않기 때문)
o
clear() 집합의 모든 원소를 제거합니다. x
반응형