Java

[Java/Set] HashSet, LinkedHashSet, TreeSet

Castle Bird 2025. 10. 21. 20:03

1. SET

자료의 중복을 허용하지 않는다.

- 동일 값을 추가시 새로운 값을 무시하고 기존 값을 유지한다.

Set<Integer> set = Set.of(10, 30, 15, 40, 25, 55, 10, 30);

System.out.println(set);

// 결과
/*
Exception in thread "main" java.lang.IllegalArgumentException: duplicate element: 10
    at java.base/java.util.ImmutableCollections$SetN.<init>(ImmutableCollections.java:918)
    at java.base/java.util.Set.of(Set.java:612)
    at Main.main(Main.java:5)
*/

IllegalArgumentException - 전달된 인수가 잘못되었을 때 발생

duplicate element: 10 - 10이라는 숫자 인수가 잘 못 들어옴

 


 

📝 중복을 허용하지 않는 이유

Set의 동작은 내부적으로

해시테이블 / 블랙-레드 트리의 자료구조를 사용하는데

이것들은 중복을 허용하지 않는다.

※hashtable의 중복체크 방법 예시 및 자료

1. 인자를 받는다.

2. 받은 인자를 해쉬함수를 사용해 정수로 변환한다.

3. 이 값을 이용해 버킷(bucket)에 접근.

4. 버킷에 있는 값을 비교한다.

위와 같은 방법을 통해 기존 값이랑 중복이 되는지 체크한다.

관련 링크: https://mymyrecord.tistory.com/32

 


 

2. HashSet

기존 Set의 중복 허용 금지 + 자료의 삽입 순서를 보장하지 않는다.

List<Integer> numbers = List.of(10, 30, 15, 40, 25, 55);

Set<Integer> hashSet = new HashSet<>(numbers);

System.out.println(hashSet); // [55, 40, 25, 10, 30, 15]

 


 

3. LinkedSet

기존 Set의 중복 허용 금지 + 자료의 삽입 순서를 보장한다.

List<Integer> numbers = List.of(10, 30, 15, 40, 25, 55);

Set<Integer> linkedHashSet = new LinkedHashSet<>(numbers);

System.out.println(linkedHashSet); // [10, 30, 15, 40, 25, 55]

 


 

4. TreeSet

기존 Set의 중복 허용 금지 + 자료가 오름차순으로 정렬된다.

List<Integer> numbers = List.of(10, 30, 15, 40, 25, 55);

Set<Integer> treeSet = new TreeSet<>(numbers);

System.out.println(treeSet); // [10, 15, 25, 30, 40, 55]

'Java' 카테고리의 다른 글

[Java] Spring의 탄생 배경  (0) 2025.12.11
[Java] HashSet  (0) 2025.12.07
[Java] Stream - map과 flatMap  (0) 2025.11.26
[Java] 단일 책임 원칙(SRP)과 개방-폐쇄 원칙(OCP)  (0) 2025.11.25
[Java] 싱글톤 패턴  (0) 2025.11.18