자바

자바 컬렉션 Java - TreeMap, Comparable과 Comparator

알통몬_ 2017. 3. 25. 20:22
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

이전 포스팅에 이어서 검색 기능을 강화시킨 컬렉션에 대해 공부하겠습니다.

2017/03/25 - [자바] - 자바 컬렉션 Java 컬렉션 - 이진트리구조, TreeSet


TreeMap

 : TreeSet과의 차이점 : Key 와 Value가 저장된 Map.Entry를 저장한다는 것.

TreeMap에 객체를 저장하게 되면 자동으로 정렬이 됩니다.

부모 키값과 비교를 해 키 값이 낮으면 왼쪽 자식 노드로,

키 값이 높으면 오른쪽 자식 노드의 Map.Entry 객체에 저장됩니다.


TreeMap 생성 방법은 HashMap과 동일합니다.

2017/03/24 - [자바] - 자바 Map 컬렉션 자바 셋 컬렉션 -> Map, HashMap, Hashtable, Properties


생성할 때 Map 인터페이스 타입 변수로 대입해도 되지만 아래 

TreeMap 클래스 타입으로 대입하는 것이 좋은데 이유는 아래와 같은 메소드들을

사용하기 위해서 입니다.

예제)



TreeMap이 가지는 정렬관련 메소드

descendingMap()은 정렬된 NavigabableMap 객체를 정렬하여 내림차순으로 리턴합니다.

firstEntry() , lastEntry(), lowerEntry(), higherEntry(), floorEntry(), ceilingEntry()를 제공하고

 오름차순과 내림차순을 번갈아가며 정렬 순서를 바꾸는 descendingMap도 제공합니다.

만약 내림차순이 아닌 오름차순으로 정렬하고 싶다면 descendingMap()을 두 번 호출하면 됩니다. 


예제)


TreeMap이 가지는 범위검색 관련 메소드


예제)



Comparable과 Comparator

TreeSet, TreeMap은 정렬을 위해 java.lang.Comparable을 구현한 객체를 요구하는데요.

Integer, Double, String의 정렬은 전부 Comparable 인터페이스를 구현하고 있어요.

사용자 정의 클래스도 Comparable을 구현하게 되면 자동 정렬을 할 수 있습니다.

Comparable에는 compareTo() 가 정의되어 있어서 이 메소드를 사용자 정의 클래스에서

오버라이딩하여 사용할 수 있습니다.

예제)


TreeSet 객체와 TreeMap의 Key가 Comparable을 구현하고 있지 않다면

저장하는 순간 예외가 발생하는 데요.

Comparable 비구현 객체를 정렬하는 방법은

TreeSet 이나 TreeMap 생성자의 매개값으로 정렬자를 제공하는 것이에요.


TreeSet<E> treeSet = new TreeSet<E>(new AscendingComparator() );

                                                  오름차순 또는 내림차순 정렬자

TreeMap<K ,V> treeMap = new TreeMap<K, V>(new DescendingComparator() );



정렬자는 Comparator 인터페이스를 구현한 객체를 말합니다. 

Comparator 인터페이스는 compare()가 정의되어 있습니다.



예제)


이상입니다.

반응형