public class TreeMap<K,V>extends AbstractMap<K,V>implements NavigableMap<K,V>, Cloneable, Serializable
TreeMap中的元素默認按照keys的自然排序排列。 (對Integer來說,其自然排序就是數(shù)字的升序;對String來說,其自然排序就是按照字母表排序) 構(gòu)造函數(shù)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 replace(K key, V value):替換指定key對應(yīng)的value值
boolean replace(K key, V oldValue, V newValue):當指定key的對應(yīng)的value為指定值時,替換該值為新值
查找元素boolean containsKey(Object key):判斷該TreeMap中是否包含指定key的映射
boolean containsValue(Object value):判斷該TreeMap中是否包含有關(guān)指定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對應(yīng)的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構(gòu)成的集合
其他方法Object clone():返回TreeMap實例的淺拷貝
Comparator<? super K> comparator():返回給該TreeMap的keys排序的comparator,若為自然排序則返回null
int size():返回該TreepMap中包含的映射的數(shù)量
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: 3treeMap.replace(2, 'e'); // treeMap: {1=a, 2=e, 3=c}Map.Entry entry = treeMap.firstEntry(); // entry: 1 -> aInteger key = treeMap.firstKey(); // key: 1entry = treeMap.lastEntry(); // entry: 3 -> ckey = treeMap.lastKey(); // key: 3String value = treeMap.get(3); // value: cSortedMap 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
遍歷方式
補充:如何選擇合適的MapHashMap可實現(xiàn)快速存儲和檢索,但其缺點是其包含的元素是無序的,這導(dǎo)致它在存在大量迭代的情況下表現(xiàn)不佳。 LinkedHashMap保留了HashMap的優(yōu)勢,且其包含的元素是有序的。它在有大量迭代的情況下表現(xiàn)更好。 TreeMap能便捷的實現(xiàn)對其內(nèi)部元素的各種排序,但其一般性能比前兩種map差。
LinkedHashMap映射減少了HashMap排序中的混亂,且不會導(dǎo)致TreeMap的性能損失。
參考
|