TreeMap用法總結


TreeMap用法總結

public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, Serializable 

TreeMap中的元素默認按照keys的自然排序排列。

(對Integer來說,其自然排序就是數字的升序;對String來說,其自然排序就是按照字母表排序)

構造函數

  • TreeMap():創建一個空TreeMap,keys按照自然排序

    TreeMap<Integer, String> treeMap = new TreeMap<>(); 
  • TreeMap(Comparator comparator):創建一個空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創建一個TreeMap,keys按照自然排序

    Map<Integer, String> map = new HashMap<>(); map.put(1, "val"); ... TreeMap<Integer, String> treeMap = new TreeMap<>(map); 
  • TreeMap(SortedMap m):由給定的有序map創建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中的每一個映射執行指定操作
  • 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循環

    for (Map.Entry entry : treeMap.entrySet()) { System.out.println(entry); } 
  • 迭代器循環

    Iterator iterator = treeMap.entrySet().iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } 

補充:如何選擇合適的Map

  • HashMap可實現快速存儲和檢索,但其缺點是其包含的元素是無序的,這導致它在存在大量迭代的情況下表現不佳。
  • LinkedHashMap保留了HashMap的優勢,且其包含的元素是有序的。它在有大量迭代的情況下表現更好。
  • TreeMap能便捷的實現對其內部元素的各種排序,但其一般性能比前兩種map差。

LinkedHashMap映射減少了HashMap排序中的混亂,且不會導致TreeMap的性能損失。


參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM