[Java] 자료구조 컬렉션 : TreeSet, TreeMap

Local Gaji·2023년 9월 2일

이것이 자바다

목록 보기
16/18

🎈 TreeSet

이진트리를 기반으로 하는 set 컬렉션으로, 효율적인 탐색이 가능하다.

TreeSet<E> treeSet = new TreeSet<>();
메서드역할
first()제일 낮은 객체를 리턴
last()제일 높은 객체를 리턴
lower(E e)객체 e 의 바로 아래 객체를 리턴
higher(E e)객체 e 의 바로 위 객체를 리턴
floor(E e)객체 e 와 동등한 객체 리턴, 없으면 바로 아래 객체를 리턴
ceiling(E e)객체 e 와 동등한 객체 리턴, 없으면 바로 위 객체를 리턴
pollFirst()제일 낮은 객체를 제거하고 리턴
pollLast()제일 높은 객체를 제거하고 리턴
descendingIterator()내림차순으로 정렬된 Iterator 를 리턴
descendingSet()내림차순으로 정렬된 NavigableSet 를 리턴
headSet(E e, 같은거포함여부)e 보다 낮은 객체들을 NavigableSet 로 리턴
tailSet(E e, 같은거포함여부)e 보다 높은 객체들을 NavigableSet 로 리턴
subSet(E e, 포함, F f, 포함)e 부터 f 까지 범위의 객체들을 NavigableSet 로 리턴

🔰 NavigableSet

// set을 내림차순으로 정렬해서 순회
NavigableSet<Integer> orderedSet = set.descendingSet();
for(Integer e : orderedSet) {
  ...
}

// set 에서 80보다 높은 요소들을 순회
NavigableSet<Integer> over80 = set.headSet(80, true);
for(Integer e : over80) {
  ...
}

// set 에서 70~80 사이인 요소들을 순회
NavigableSet<Integer> from70to80 = set.subSet(70, true, 80, true);
for(Integer e : from70to80) {
  ...
}

🎈 TreeMap

이진트리를 기반으로 하는 Map 컬렉션으로, 효율적인 탐색이 가능하다. 트리에 키:값 Entry 가 저장되며, 키를 기준으로 정렬된다.

메서드역할
firstEntry()제일 낮은 Entry 를 리턴
lastEntry()제일 높은 Entry 를 리턴
lowerEntry(K key)key 의 바로 아래 Entry 를 리턴
higherEntry(K key)key 의 바로 위 Entry 를 리턴
floorEntry(K key)동등한 Entry 리턴, 없으면 바로 아래 Entry 리턴
ceilEntry(K key)동등한 Entry 리턴, 없으면 바로 위 Entry 리턴
pollFirstEntry()제일 낮은 Entry 를 제거하고 리턴
pollLast()제일 높은 Entry 를 제거하고 리턴
descendingKeySet()내림차순으로 정렬된 키의 NavigableSet 를 리턴
descendingMap()내림차순으로 정렬된 Entry 의 NavigableMap 를 리턴
headMap(K key, 같은거포함여부)key 보다 낮은 Entry 들을 NavigableMap 로 리턴
tailMap(K key, 같은거포함여부)key 보다 높은 Entry 들을 NavigableMap 로 리턴
subMap(K k1, 포함, K k2, 포함)키가 k1 ~ k2 사이인 Entry 들을 NavigableMap 로 리턴

Entry 의 타입은 Entry<K,V> 이고,
NavigableMap 의 타입은 NavigableMap<K,V> 이다.


🔰 NavigableMap

/* 키를 기준으로 엔트리를 내림차순으로 정렬해서 순회 */

// 1. 내림차순 NavigableMap 얻기
NavigableMap<String,Integer> orderedMap = map.descendingMap();  

// 2. Set 으로 변경하기 (entrySet)
Set<Entry<String,Integer>> orderedEntrySet = orderedMap.entrySet();

// 3. entrySet 순회하기
for(Entry<String,Integer> e : orderedEntrySet) {
  ...
}


/* 키 값이 A~C 사이인 엔트리를 순회 */
NavigableMap<String,Integer> AtoC = set.subMap("A", true, "C", true);
Set<Entry<String,Integer>> AtoCEntrySet = AtoC.entrySet();
for(Entry<String,Integer> e : AtoCEntrySet) {
  ...
}

🔰 Entry 에서 키, 값 얻기

for(Entry<K,V> entry : entrySet) {
  K key = entry.getKey();
  V value = entry.getValue();
}














0개의 댓글