Collection_3_Set
by 핫도구반응형
Set
Set은 흔히 알고 있는 집합이라는 뜻으로 중복된 요소를 허용하지 않으며 일반적으로 순서는 보장되지 않는다. 즉, 수학을 배울 때 알고 있는 집합이라고 생각하면 편하다. 만약 이것도 잘 모르겠다고 한다면 대기 중에 어떤 것들이 있는지 생각하면 편하다. 예를들어 대기에는 78%의 질소와 21%의 산소와 나머지로 구성되어 있는 것으로 생각하면 된다.
HashSet
HashSet의 특징
1. 중복이 허용되지 않음
2. 순서가 없음
3. 해시 기반 저장
4. null값은 하나를 허용
5. 동기화되지 않음
Set<String> fruits = new HashSet<>();
fruits.add("apple");
fruits.add("banana");
fruits.add("cherry");
fruits.add("apple");
System.out.println(fruits); // [banana, apple, cherry]
for (String fruit : fruits) {
System.out.println(fruit+"의 hashCode = "+fruit.hashCode());
}
//banana의 hashCode = -1396355227
//apple의 hashCode = 93029210
//cherry의 hashCode = -1361513063
이를 통해 중복이 허용되지 않고 순서가 없다는 것을 볼 수 있다.
해시기반 저장은 해시함수를 기반으로 저장할 데이터를 특정 값인 해시값으로 변환하여 이 해시값을 데이터를 저장할 인덱스로 사용된다. 이러한 인덱스의 사용으로 빠르게 검색 및 삽입을 할 수 있다. 또한 DB에서 INDEX와 굉장히 비슷한 특징이 있지만 해시기반저장은 순서가 없다. 또한 단일 키로 빠르게 검색하는데 적합하지만 DB의 INDEX는 정렬된 데이터와 범위 검색을 최적화하는데 유용하다.
LinkedHashSet
LinkedHashSet의 특징
1. 중복을 허용하지 않음
2. 순서를 유지한다.
- 해시 테이블과 연결 리스트를 결합하여 구현되어 삽입 순서대로 순회 가능
3. null값은 하나를 허용
Set<String> fruits = new LinkedHashSet<>();
fruits.add("apple");
fruits.add("banana");
fruits.add("cherry");
fruits.add("apple");
System.out.println(fruits); // [apple, banana, cherry]
fruits.remove("banana");
System.out.println("banana를 제거한 fruits : "+fruits); // banana를 제거한 fruits : [apple, cherry]
TreeSet
TreeSet의 특징
1. 중복을 허용하지 않음
2. 요소들이 오름차순으로 정렬되며 Comparator를 통해 정렬이 가능하다.
3. null값을 허용하지 않는다.
TreeSet<Integer> num = new TreeSet<>();
num.add(1);
num.add(5);
num.add(30);
num.add(10);
num.add(15);
num.add(10);
num.add(25);
num.add(20);
System.out.println(num); // [1, 5, 10, 15, 20, 25, 30]
System.out.println("최소값 : " +num.first()); // 최소값 : 1
System.out.println("최대값 : " +num.last()); // 최대값 : 30
System.out.println("20이상: " +num.tailSet(20)); // 20이상 : [20, 25, 30]
System.out.println("20보다 작은 값 : " +num.headSet(20)); // 20보다 작은 값 : [1, 5, 10, 15]
System.out.println("10이상 25 미만 : " +num.subSet(10, 25)); // 10이상 25 미만 : [10, 15, 20]
num.add(null); // 바로 에러 발생
이처럼 각각의 특성을 알아봤으며 이 또한 각각에 맞는 쓰임새에 맞게 사용해야 한다.
HashSet은 순서에 관계없으며 빠른 검색 및 삽입이 필요한 경우이며 LinkedHashSet은 순서가 상관있는 경우이며 TreeSet은 범위검색 및 각각의 요소가 정렬이 된 상태가 필요한 경우이다.
반응형
'JAVA > OLD' 카테고리의 다른 글
| Collection_4_Map (0) | 2025.03.01 |
|---|---|
| Collection_2_List (0) | 2025.02.11 |
| Collection_1 (0) | 2025.02.02 |
| JSTL LOOP(forEach) (0) | 2024.08.19 |
| JSTL_if, choose(조건분기) (0) | 2024.08.19 |
블로그의 정보
AquaMan
핫도구