Set 인터페이스

2024. 8. 1. 21:23JAVA/복습

Set

Set은 List와 같이 Collection의 인터페이스를 상속하는 인터페이스이다.

중복을 허용하지 않고,

순서를 보장하지 해주지 않는다. (TreeSet, LinkedHashSet 은 순서 보장이 가능하다)

 

종류

HashSet

TreeSet 등이 있다.

 

HashSet

- Hash 알고리즘을 적극적으로 활용한다.

ㄴ 따라서, 주요 연산 처리에 빠르다[ O(1) ]. 

- 파생체로 LinkedHashSet 가 있다.

- 순서 보장 필요 없고, 단일성만 띌 집합 자료모음을 다룰 때 유리하다.

 

TreeSet

- 트리 구조를 띄고 있다.

- 트리 노드는 left, right 노드를 갖는다.

ㄴ 특정 데이터 조회에 O(log2) 의 성능을 갖는다.

- 좌, 우로 데이터를 추가하기 위한 기준이 필요하다.

ㄴ 따라서, TreeSet 에 담을 데이터는 비교기준(Comparable, Comparator) 를 가지고 있어야 한다.

- 기준에 맞춰 정렬된 순서가 필요한 집합을 다룰 때 유용하다.

 

 

====

복습 중 갑자기 꼬인 생각

Set set = new TreeSet();

Set에 Treeset을 담았을 때, 순서 보장이 발생하는 이유가 뭐지?

 

상속과 다형성의 특성에 의거하여, 하위 개념을 상위 개념에 담았을 때, 

하위 개념은 상위 개념을 상속받아 알고 있지만

상위 개념은 하위 개념을 알지 못한다. 담을 수만 있다.

따라서, 상위 개념에 하위 개념을 담았을 때, 상위 개념의 기능만 사용 가능하다.

그런데 어떻게 순서 보장이라는 하위 개념 기능이 발현될까?

public class exam {
    public static void main(String[] args) {
        Set<Integer> set = new TreeSet<Integer>();

        set.add(5);
        set.add(4);
        set.add(2);
        set.add(1);

        System.out.println(set);
    }
}

 

TreeSet은 NavigableSet, SortedSet 을 구현한다.

 

이 인터페이스들의 구현으로 하여금 TreeSet add()를 실행했을 때 순서 보장이 가능해진다.

 

결국, Set 의 add() 를 썼을 때, 하위에서 오버라이딩 돼 있기 때문에 이게 가능했다는 소리.

생각 꼬인 원인

1. Set에 대한 낮은 이해도

2. 잠시 해까닥했던 상속과 다형성, overriding

 

 

'JAVA > 복습' 카테고리의 다른 글

순회 - Iterable, Iterator  (0) 2024.08.02
Map  (0) 2024.08.02
Set - HashSet  (0) 2024.07.31
LinkedList  (0) 2024.07.31
ArrayList  (0) 2024.07.31