TreeMap用法總結

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的性能損失。


參考

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末徘熔,一起剝皮案震驚了整個濱河市门躯,隨后出現的幾起案子,更是在濱河造成了極大的恐慌酷师,老刑警劉巖讶凉,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異山孔,居然都是意外死亡懂讯,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門台颠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來域醇,“玉大人,你說我怎么就攤上這事蓉媳。” “怎么了锅铅?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵酪呻,是天一觀的道長。 經常有香客問我盐须,道長玩荠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮阶冈,結果婚禮上闷尿,老公的妹妹穿的比我還像新娘。我一直安慰自己女坑,他們只是感情好填具,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著匆骗,像睡著了一般劳景。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碉就,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天盟广,我揣著相機與錄音,去河邊找鬼瓮钥。 笑死筋量,一個胖子當著我的面吹牛,可吹牛的內容都是我干的碉熄。 我是一名探鬼主播桨武,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼具被!你這毒婦竟也來了玻募?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤一姿,失蹤者是張志新(化名)和其女友劉穎七咧,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體叮叹,經...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡艾栋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了蛉顽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝗砾。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖携冤,靈堂內的尸體忽然破棺而出悼粮,到底是詐尸還是另有隱情,我是刑警寧澤曾棕,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布扣猫,位于F島的核電站,受9級特大地震影響翘地,放射性物質發(fā)生泄漏申尤。R本人自食惡果不足惜癌幕,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昧穿。 院中可真熱鬧勺远,春花似錦、人聲如沸时鸵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寥枝。三九已至宪塔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間囊拜,已是汗流浹背某筐。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冠跷,地道東北人南誊。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像蜜托,于是被迫代替她去往敵國和親抄囚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內容

  • 一、基本數據類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數值 對于byte類型而言...
    龍貓小爺閱讀 4,268評論 0 16
  • Map接口 Map是 一個鍵值對的集合蜂挪。也就是說重挑,一個映射不能包含重復的鍵,每個鍵最多映射到一個值棠涮。該接口取代了D...
    wame100閱讀 781評論 0 0
  • 集合類的相關總結(一)集合類的相關總結(二) Map<K,V> 特點: 以鍵值對的形式存儲數據 鍵的值是唯一的谬哀,不...
    MLLWF閱讀 176評論 0 0
  • 本系列出于AWeiLoveAndroid的分享,在此感謝严肪,再結合自身經驗查漏補缺史煎,完善答案。以成系統(tǒng)驳糯。 Java基...
    濟公大將閱讀 1,529評論 1 6
  • 九年前篇梭,和一幫南藝尚美的學生一起包車來到了這里,那時候酝枢,門票是可有可無的很洋,家庭旅館是50塊還包餐的。 我只有一臺柯...
    尚物智閱讀 446評論 0 3