TreeMap用法總結
public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, Serializable
TreeMap中的元素默認按照keys的自然排序排列叭莫。
(對Integer來說冤今,其自然排序就是數字的升序;對String來說毫别,其自然排序就是按照字母表排序)
構造函數
-
TreeMap()
:創(chuàng)建一個空TreeMap娃弓,keys按照自然排序TreeMap<Integer, String> treeMap = new TreeMap<>();
-
TreeMap(Comparator comparator)
:創(chuàng)建一個空TreeMap,按照指定的comparator排序TreeMap<Integer, String> map = new TreeMap<>(Comparator.reverseOrder()); map.put(3, "val"); map.put(2, "val"); map.put(1, "val"); map.put(5, "val"); map.put(4, "val"); System.out.println(map); // {5=val, 4=val, 3=val, 2=val, 1=val}
-
TreeMap(Map m)
:由給定的map創(chuàng)建一個TreeMap岛宦,keys按照自然排序Map<Integer, String> map = new HashMap<>(); map.put(1, "val"); ... TreeMap<Integer, String> treeMap = new TreeMap<>(map);
TreeMap(SortedMap m)
:由給定的有序map創(chuàng)建TreeMap台丛,keys按照原順序排序
常用方法
增添元素
-
V put(K key, V value)
:將指定映射放入該TreeMap中 -
V putAll(Map map)
:將指定map放入該TreeMap中
刪除元素
-
void clear()
:清空TreeMap中的所有元素 -
V remove(Object key)
:從TreeMap中移除指定key對應的映射
修改元素
-
V replace(K key, V value)
:替換指定key對應的value值 -
boolean replace(K key, V oldValue, V newValue)
:當指定key的對應的value為指定值時,替換該值為新值
查找元素
-
boolean containsKey(Object key)
:判斷該TreeMap中是否包含指定key的映射 -
boolean containsValue(Object value)
:判斷該TreeMap中是否包含有關指定value的映射 -
Map.Entry<K, V> firstEntry()
:返回該TreeMap的第一個(最小的)映射 -
K firstKey()
:返回該TreeMap的第一個(最小的)映射的key -
Map.Entry<K, V> lastEntry()
:返回該TreeMap的最后一個(最大的)映射 -
K lastKey()
:返回該TreeMap的最后一個(最大的)映射的key -
v get(K key)
:返回指定key對應的value -
SortedMap<K, V> headMap(K toKey)
:返回該TreeMap中嚴格小于指定key的映射集合 -
SortedMap<K, V> subMap(K fromKey, K toKey)
:返回該TreeMap中指定范圍的映射集合(大于等于fromKey砾肺,小于toKey)
遍歷接口
-
Set<Map<K, V>> entrySet()
:返回由該TreeMap中的所有映射組成的Set對象 -
void forEach(BiConsumer<? super K,? super V> action)
:對該TreeMap中的每一個映射執(zhí)行指定操作 -
Collection<V> values()
:返回由該TreeMap中所有的values構成的集合
其他方法
-
Object clone()
:返回TreeMap實例的淺拷貝 -
Comparator<? super K> comparator()
:返回給該TreeMap的keys排序的comparator挽霉,若為自然排序則返回null -
int size()
:返回該TreepMap中包含的映射的數量
TreeMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(1, "a");
treeMap.put(2, "b");
treeMap.put(3, "c");
treeMap.put(4, "d"); // treeMap: {1=a, 2=b, 3=c, 4=d}
treeMap.remove(4); // treeMap: {1=a, 2=b, 3=c}
int sizeOfTreeMap = treeMap.size(); // sizeOfTreeMap: 3
treeMap.replace(2, "e"); // treeMap: {1=a, 2=e, 3=c}
Map.Entry entry = treeMap.firstEntry(); // entry: 1 -> a
Integer key = treeMap.firstKey(); // key: 1
entry = treeMap.lastEntry(); // entry: 3 -> c
key = treeMap.lastKey(); // key: 3
String value = treeMap.get(3); // value: c
SortedMap sortedMap = treeMap.headMap(2); // sortedMap: {1=a}
sortedMap = treeMap.subMap(1, 3); // sortedMap: {1=a, 2=e}
Set setOfEntry = treeMap.entrySet(); // setOfEntry: [1=a, 2=e, 3=c]
Collection<String> values = treeMap.values(); // values: [a, e, c]
treeMap.forEach((integer, s) -> System.out.println(integer + "->" + s));
// output:
// 1 -> a
// 2 -> e
// 3 -> c
遍歷方式
-
for循環(huán)
for (Map.Entry entry : treeMap.entrySet()) { System.out.println(entry); }
-
迭代器循環(huán)
Iterator iterator = treeMap.entrySet().iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); }
補充:如何選擇合適的Map
- HashMap可實現快速存儲和檢索,但其缺點是其包含的元素是無序的变汪,這導致它在存在大量迭代的情況下表現不佳侠坎。
- LinkedHashMap保留了HashMap的優(yōu)勢,且其包含的元素是有序的裙盾。它在有大量迭代的情況下表現更好实胸。
- TreeMap能便捷的實現對其內部元素的各種排序,但其一般性能比前兩種map差番官。
LinkedHashMap映射減少了HashMap排序中的混亂庐完,且不會導致TreeMap的性能損失。