treemap java tutorial with java treemap examples
이 Java TreeMap 자습서에서는 TreeMap 클래스, 반복, TreeMap 예제, 구현, Java Hashmap 대 Treemap, TreeMap API 메서드 등을 설명합니다.
TreeMap 데이터 구조는 자연스럽게 정렬 된 순서로 키-값 쌍을 저장하는 모음입니다. TreeMap은 Java Collections Framework의 일부이며 맵 구현입니다.
학습 내용 :
자바 트리 맵
Java에서 TreeMap의 주요 특성 중 일부는 다음과 같습니다.
- Java에서 트리 맵을 구현하는 TreeMap 클래스는 java.util 패키지의 일부입니다. Map 인터페이스를 구현합니다.
- TreeMap 클래스는 AbstractMap 클래스를 확장하고 NavigableMap 및 SortedMap (간접) 인터페이스도 구현합니다.
- TreeMap이 동기화되지 않았습니다.
- 기본적으로 TreeMap 요소는 기본적으로 오름차순입니다.
- TreeMap은 중복 요소를 허용하지 않습니다.
- TreeMap은 null 값을 허용하지만 null 키는 허용하지 않습니다.
아래 다이어그램은 TreeMap 클래스의 클래스 계층 구조를 보여줍니다.
이미 언급했듯이 TreeMap 클래스는 SortedMap 클래스를 차례로 확장하는 NavigableMap 인터페이스를 구현합니다. SortedMap은지도 인터페이스를 더 상속합니다.
TreeMap 클래스 선언
TreeMap 클래스의 일반적인 선언은 다음과 같습니다.
public class TreeMap extends AbstractMap implements NavigableMap, Cloneable, Serializable
여기서 K => TreeMap에 의해 유지되는 키 유형
V => 매핑 된 값의 유형
TreeMap 예
아래 프로그램은 TreeMap 데이터 구조의 간단한 예를 보여줍니다.
import java.util.*; class Main{ public static void main(String args()){ //declare a TreeMap and initialize it TreeMap cities_map=new TreeMap (); cities_map.put(100,'Pune'); cities_map.put(102,'Jaipur'); cities_map.put(101,'Hyderabad'); cities_map.put(103,'Bangaluru'); //print the TreeMap contents using forEach System.out.println('Contents of TreeMap:'); System.out.print('{'); for(Map.Entry entries:cities_map.entrySet()){ System.out.print(entries.getKey()+' = '+entries.getValue() + ' '); } System.out.println('}'); } }
산출:
TreeMap의 내용 :
{100 = 푸네 101 = 하이데라바드 102 = 자이푸르 103 = 방갈 루루}
이 프로그램에서 우리는 도시지도라는 이름의 간단한 TreeMap 객체를 정의하고 put 메소드를 사용하여 키-값 쌍으로 초기화했습니다.
그런 다음 TreeMap 클래스의 entrySet () 메서드를 사용하고 forEach 루프를 사용하여이 집합을 반복하여 키-값 쌍을 인쇄합니다. 키-값 쌍을 인쇄하려면 각각 getKey () 및 getValue () 메서드를 사용합니다.
Windows 8.1 용 무료 백업 소프트웨어
TreeMap API 메서드 및 생성자
이 섹션에서는 TreeMap 클래스에서 제공하는 다양한 생성자와 메서드에 대해 설명합니다.
생성자
생성자 프로토 타입 | 기술 | |
---|---|---|
내림차순 | NavigableMapDescendingMap () | 주어진 키-값 쌍을 역순으로 반환합니다. |
TreeMap () | 자연 순서로 빈 TreeMap을 만드는 기본 생성자입니다. | |
TreeMap (비교기 비교기) | 지정된 비교자를 기준으로 정렬 된 빈 TreeMap을 생성합니다. | |
TreeMap (지도 m) | TreeMap을 구성하고 지정된 맵 m의 요소로 초기화합니다. 주문은 자연 스럽습니다. | |
TreeMap (SortedMap m) | TreeMap을 구성하고 SortedMap 항목으로 초기화합니다. 순서는 sortedMap과 동일합니다. |
행동 양식
방법 | 방법 프로토 타입 | 기술 |
---|---|---|
ceilingEntry | Map.Entry ceilingEntry (K 키) | 키가 지정된 키보다 크거나 같도록 최소 키-값 쌍을 반환합니다. 키가 없으면 null |
ceilingKey | K 천장 키 (K 키) | 주어진 키보다 작고 큰 키를 반환합니다. 키가 없으면 null을 반환합니다. |
맑은 | 무효 클리어 () | 트리 맵에서 모든 키-값 쌍을 삭제합니다. |
복제하다 | 개체 복제 () | TreeMap 인스턴스의 얕은 복사본을 만듭니다. |
비교기 | 비교기 비교기 () | 키를 정렬하는 데 사용되는 비교기를 반환합니다. 주문이 자연스러운 경우 null |
내림차순 KeySet | NavigableSet 내림차순 KeySet () | TreeMap 키의 NavigableSet 뷰를 역순으로 반환합니다. |
firstEntry | Map.Entry firstEntry () | 최소 키-값 쌍을 반환합니다. |
floorEntry | Map.Entry floorEntry (K 키) | 주어진 키보다 작거나 같은 가장 큰 키를 반환합니다. 그러한 키가 없으면 null |
각각 | void forEach (BiConsumer 작업) | 주어진 작업은 TreeMap의 각 항목에 대해 수행됩니다. |
headMap | SortedMap headMap (K toKey) | 반환 된 키가 toKey보다 작도록 키-값 쌍을 반환하는 데 사용됩니다. |
headMap | NavigableMap headMap (K toKey, 부울 포함) | toKey보다 작거나 포함하는 경우 같은 키의 키-값 쌍을 반환합니다. |
더 높은 항목 | Map.Entry higherEntry (K 키) | 최소 키 또는 null을 반환합니다. 반환 된 키는 주어진 키보다 엄격하게 큽니다. |
highKey | K 더 높은 키 (K 키) | 트리 맵에 지정된 키에 대한 매핑이있는 경우 키를 반환합니다. |
keySet | keySet 설정 () | TreeMap의 키 집합 컬렉션을 반환합니다. |
lastEntry | Map.Entry lastEntry () | 키가 가장 큰 키가되도록 키-값 쌍을 반환합니다. 키가 없으면 null을 반환합니다. |
lowerEntry | Map.Entry lowerEntry (K 키) | 키가 주어진 키보다 크고 엄격하게 작도록 키-값 쌍을 반환합니다. 키가 없으면 null을 반환합니다. |
lowerKey | K 낮은 키 (K 키) | 가장 큰 키 또는 null을 반환합니다. 반환 된 키는 주어진 키보다 엄격하게 작습니다. |
navigableKeySet | NavigableSet navigableKeySet () | TreeMap에서 키의 'NavigableSet'를 반환합니다. |
pollFirstEntry | Map.Entry pollFirstEntry () | 최소 키의 키-값 쌍을 제거한 다음 반환합니다. |
pollLastEntry | Map.Entry pollLastEntry () | 가장 큰 키의 키-값 쌍을 제거하고 반환합니다. |
놓다 | V put (K 키, V 값) | 주어진 키와 값을 TreeMap에 추가합니다. |
putAll | void putAll (지도 맵) | 지정된 맵의 모든 키-값 쌍이 TreeMap에 복사됩니다. |
바꾸다 | V 교체 (K 키, V 값) | 주어진 키의 값을 주어진 값으로 바꾸거나 변경합니다. |
바꾸다 | 부울 대체 (K 키, V oldValue, V newValue) | 주어진 키의 oldValue를 newValue로 대체합니다. |
전부 교체 | void replaceAll (BiFunction 함수) | 주어진 함수를 호출하고 모든 항목을 함수의 결과로 바꿉니다. |
서브맵 | NavigableMap subMap (K fromKey, 부울 fromInclusive, K toKey, 부울 toInclusive) | 'fromKey'에서 'toKey'까지의 키-값 쌍을 반환합니다. |
SortedMap | SortedMap subMap (K fromKey, K toKey) | fromKey (포함)에서 toKey (제외)까지 범위에 대한 키-값 쌍을 반환합니다. |
tailMap | SortedMap tailMap (K fromKey) | 키가 fromKey보다 크거나 같도록 키-값 쌍을 반환합니다. |
tailMap | NavigableMap tailMap (K fromKey, 부울 포함) | fromKey (포함 = true)와 같거나 fromKey보다 큰 키에 대한 키-값 쌍을 반환합니다. |
containsKey | 부울 containsKey (객체 키) | 트리 맵에 지정된 키에 대한 매핑이 있는지 확인합니다. 그렇다면 true를 반환합니다. |
containsValue | 부울 containsValue (객체 값) | 주어진 값으로 매핑 된 키가 있는지 확인합니다. 참이면 yes를 반환합니다. |
firstKey | K firstKey () | 정렬 된 맵에서 가장 낮은 키 또는 첫 번째 키를 반환합니다. |
가져 오기 | V get (객체 키) | 주어진 키에 매핑 된 값을 검색합니다. |
lastKey | K lastKey () | 정렬 된 맵에서 마지막 키 또는 가장 높은 키를 반환합니다. |
없애다 | V 제거 (객체 키) | TreeMap에서 주어진 키에 대한 키-값 쌍을 삭제합니다. |
entrySet | 세트 | 주어진 TreeMap에 대한 집합을 반환합니다. |
크기 | int 크기 () | TreeMap에서 크기 또는 총 키-값 쌍 수를 반환합니다. |
가치 | 컬렉션 값 () | TreeMap의 값 컬렉션을 반환합니다. |
TreeMap 반복
TreeMap은 키-값 쌍으로 구성됩니다. TreeMap 클래스는 맵에서 키-값 쌍을 반환하는 'entrySet'메서드를 제공합니다. forEach 루프를 사용하여 이러한 항목을 반복하고 각각 getKey () 및 getValue () 메서드를 사용하여 키와 값을 표시 할 수 있습니다.
이것은 아래 Java 프로그램에 표시됩니다.
import java.util.Map; import java.util.TreeMap; class Main { public static void main(String() arg){ //declare and initialize TreeMap Map colorsTree = new TreeMap(); colorsTree.put('R', 'Red'); colorsTree.put('G', 'Green'); colorsTree.put('B', 'Blue'); colorsTree.put('M', 'Magenta'); System.out.println('The contents of TreeMap:'); // retrieve set of map entries using entrySet method for (Map.Entry Map_entry : colorsTree.entrySet()) //print key-value pairs using getKey() and getValue() System.out.println( '(' + Map_entry.getKey() + '=>' + Map_entry.getValue() + ')'); } }
산출:
TreeMap의 내용 :
(B => 파란색)
(G => 녹색)
(M => 자홍색)
(R => 빨간색)
Java에서 TreeMap 구현
다음 Java 프로그램은 위에서 설명한 TreeMap 클래스의 주요 메서드를 보여줍니다.
import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; public class Main { public static void main(String() args) { //declare a TreeMap Object and initialize it with values TreeMap map = new TreeMap<>(); for(int i=1;i<=10;i++) { map.put(i, (i*i)+''); } System.out.println('Original Map:' + map); //lowerEntry, higherEntry Entry entry = map.lowerEntry(4); System.out.println('Closest Lower Entry than 4:'+entry); entry = map.higherEntry(4); System.out.println('Closest Higher Entry than 4:'+entry); System.out.println('Closest Lower key than 4 :'+map.lowerKey(4)); entry = map.floorEntry(6); System.out.println('Closest floor entry than 6: '+entry); entry = map.ceilingEntry(6); System.out.println('Closest ceiling Entry than 6 :'+entry); entry = map.firstEntry(); System.out.println('TreeMap First Entry:'+entry); entry = map.lastEntry(); System.out.println('TreeMap Last Entry:'+entry); Map reversedMap = map.descendingMap(); System.out.println('Reversed TreeMap: '+reversedMap); //pollFirstEntry, pollLastEntry entry = map.pollFirstEntry(); System.out.println('TreeMap First Entry:'+entry); entry = map.pollLastEntry(); System.out.println('TreeMap Last Entry:'+entry); //subMap Map subMap = map.subMap(2, true, 6, true); System.out.println('Submap from 2 to 6: '+subMap); //headMap subMap = map.headMap(5, true); System.out.println('HeadMap: '+subMap); //tailMap subMap = map.tailMap(5, true); System.out.println('TailMap: '+subMap); } }
산출:
원본지도 : {1 = 1, 2 = 4, 3 = 9, 4 = 16, 5 = 25, 6 = 36, 7 = 49, 8 = 64, 9 = 81, 10 = 100}
4 : 3 = 9보다 가장 가까운 하위 항목
4 : 5 = 25보다 가장 가까운 상위 항목
가장 가까운 낮은 키 4 : 3
6보다 가장 가까운 층 : 6 = 36
6 시보 다 가장 가까운 천장 진입 : 6 = 36
TreeMap 첫 번째 항목 : 1 = 1
TreeMap 마지막 항목 : 10 = 100
반전 된 TreeMap : {10 = 100, 9 = 81, 8 = 64, 7 = 49, 6 = 36, 5 = 25, 4 = 16, 3 = 9, 2 = 4, 1 = 1}
TreeMap 첫 번째 항목 : 1 = 1
TreeMap 마지막 항목 : 10 = 100
2에서 6까지의 서브맵 : {2 = 4, 3 = 9, 4 = 16, 5 = 25, 6 = 36}
헤드 맵 : {2 = 4, 3 = 9, 4 = 16, 5 = 25}
테일 맵 : {5 = 25, 6 = 36, 7 = 49, 8 = 64, 9 = 81}
값으로 TreeMap 정렬
기본적으로 TreeMap은 자연 순서에 따라 키를 기준으로 정렬됩니다. 그러나 값에 따라 TreeMap을 정렬하려면 비교기를 사용하여 정렬을 정의해야합니다.
아래 Java 프로그램은 값별로 TreeMap을 정렬합니다.
Windows 7을위한 최고의 무료 최적화 프로그램
import java.util.*; class Main { //Method for sorting the TreeMap based on values public static > Map sortTreeMap(final Map map) { //define a comaprator to sort TreeMap on values Comparator valueComparator = new Comparator() { public int compare(K k1, K k2) { int compare = map.get(k1).compareTo(map.get(k2)); if (compare == 0) return 1; else return compare; } }; //use the comparator to sort the TreeMap and return sortedTreeMap Map sortedTreeMap = new TreeMap(valueComparator); sortedTreeMap.putAll(map); return sortedTreeMap; } public static void main(String args()) { //define and initialize the TreeMap TreeMap treemap = new TreeMap(); treemap.put('R', 'Red'); treemap.put('G', 'Green'); treemap.put('B', 'Blue'); treemap.put('C', 'Cyan'); treemap.put('M', 'Magenta'); // call method sortTreeMap to sort the TreeMap Map sortedTreeMap = sortTreeMap(treemap); // Retrieve set of the entries on the sorted map Set set = sortedTreeMap.entrySet(); System.out.println('The sorted TreeMap based on Values:'); // Now define iterator on this set Iterator i = set.iterator(); // Print TreeMap elements while(i.hasNext()) { Map.Entry me = (Map.Entry)i.next(); System.out.print(me.getKey() + ': '); System.out.println(me.getValue()); } } }
산출:
값을 기준으로 정렬 된 TreeMap :
B : 블루
C : 청록색
G : 녹색
M : 마젠타
R : 레드
자바 해시 맵 대 트리 맵
HashMap과 TreeMap의 몇 가지 주요 차이점을 살펴 보겠습니다.
아래 표는 이러한 차이점을 보여줍니다.
HashMap | TreeMap |
---|---|
HashMap은 TreeMap보다 훨씬 빠릅니다. | TreeMap이 느립니다. |
Map 인터페이스를 구현합니다. | NavigableMap 인터페이스를 구현합니다. |
해싱 구현 기술 사용 | 구현을 위해 빨강-검정 트리 사용 |
요소를 포함하는 순서를 유지하지 않습니다. | 트리 맵의 키는 이미 자연 순서대로 정렬되어 있습니다. |
하나의 null 키와 많은 null 값을 허용합니다. | null 값만 허용하지만 키는 null 일 수 없습니다. |
기본 작업을 수행하고 일정한 시간에 넣고 가져옵니다. | 넣기 및 가져 오기 작업을 수행하는 데 로그 (n) 시간 소요 |
HashMap은 기능이 제한되어 있습니다. | TreeMap 클래스는 데이터 구조를 조작하는 데 도움이되는 많은 추가 기능을 제공합니다. |
비교를 위해 equals () 메소드를 사용합니다. | 비교를 위해 compareTo () 메서드를 사용합니다. |
자주 묻는 질문
Q # 1) Java의 TreeMap은 무엇입니까?
대답: Java의 TreeMap은 이미 정렬 된 키-값 쌍의 모음입니다. 구현 목적으로 빨강-검정 트리를 사용합니다. Java TreeMap은 Map 인터페이스와 별도로 NavigableMap 인터페이스를 구현하고 AbstractMap 클래스도 확장합니다.
질문 # 2) Java에서 TreeMap을 사용하는 이유는 무엇입니까?
대답: TreeMap은 Java에서 Map 및 NavigableMap 인터페이스 및 AbstractMap 클래스를 구현하는 데 사용됩니다. TreeMap 키는 자연 순서에 따라 정렬되므로이 데이터 구조를 사용하여 디렉터리 구조, 트리 계층 구조 등을 저장할 수 있습니다.
질문 # 3) HashMap 또는 TreeMap 중 어느 것이 더 낫습니까?
대답: HashMap은 TreeMap보다 낫습니다. HashMap은 기본 작업을 수행하는 데 항상 일정한 시간이 걸리는 반면 TreeMap은 이러한 작업을 수행하는 데 로그 (n) 시간이 걸립니다. 더 큰 데이터 개체가 포함 된 경우 HashMap은 TreeMap에 비해 더 빠르게 수행됩니다.
질문 # 4) TreeMap이 정렬되어 있습니까?
대답: 예, TreeMap의 주요 항목은 자연스러운 순서에 따라 정렬됩니다. TreeMap 클래스를 사용하면 사용자 지정 비교기를 사용하여 값에 따라 TreeMap을 정렬 할 수도 있습니다.
질문 # 5) TreeMap은 스레드로부터 안전합니까?
대답: 아니요, TreeMap은 스레드로부터 안전한 컬렉션이 아닙니다.
결론
이 튜토리얼에서는 Java의 TreeMap에 대해 자세히 설명했습니다. TreeMap은 맵 인터페이스를 구현하는 키-값 쌍의 모음입니다. 또한 NavigableMap 인터페이스를 구현합니다. TreeMap의 요소는 고유하며 중복이 허용되지 않습니다.
TreeMap의 생성자와 메서드를 보았습니다. 또한 TreeMap 프로그램을 구현하고 TreeMap 클래스의 주요 메서드를 시연했습니다. 그런 다음 HashMap과 TreeMap의 차이점에 대해 논의했습니다.
=> 모두를위한 Java 교육 시리즈를 보려면 여기를 방문하십시오.