日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

常见Java面试题 程序中如何决定使用 HashMap 还是 TreeMap?

發(fā)布時間:2024/8/26 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常见Java面试题 程序中如何决定使用 HashMap 还是 TreeMap? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

回答方式:

對于在Map中插入、刪除和定位元素這類操作,HashMap是最好的選擇。

然而,假如你需要對一個有序的key集合進行遍歷,TreeMap是更好的選擇。

基于你的collection的大小,也許向HashMap中添加元素會更快,將map換為TreeMap進行有序key的遍歷。

說一下 HashMap 的實現(xiàn)原理?

HashMap概述:HashMap是基于哈希表的Map接口的非同步實現(xiàn)。此實現(xiàn)提供所有可選的映射操作,并允許使用null值和null鍵。此類不保證映射的順序,特別是它不保證該順序恒久不變。?

HashMap的數(shù)據(jù)結(jié)構(gòu):在java編程語言中,最基本的結(jié)構(gòu)就是兩種,一個是數(shù)組,另外一個是模擬指針(引用),所有的數(shù)據(jù)結(jié)構(gòu)都可以用這兩個基本結(jié)構(gòu)來構(gòu)造的,HashMap也不例外。HashMap實際上是一個“鏈表散列”的數(shù)據(jù)結(jié)構(gòu),即數(shù)組和鏈表的結(jié)合體。

當我們往Hashmap中put元素時,首先根據(jù)key的hashcode重新計算hash值,根絕hash值得到這個元素在數(shù)組中的位置(下標),如果該數(shù)組在該位置上已經(jīng)存放了其他元素,那么在這個位置上的元素將以鏈表的形式存放,新加入的放在鏈頭,最先加入的放入鏈尾.如果數(shù)組中該位置沒有元素,就直接將該元素放到數(shù)組的該位置上。

需要注意Jdk 1.8中對HashMap的實現(xiàn)做了優(yōu)化,當鏈表中的節(jié)點數(shù)據(jù)超過八個之后,該鏈表會轉(zhuǎn)為紅黑樹來提高查詢效率,從原來的O(n)到O(logn)。

如何選擇合適的Map?

  • HashMap可實現(xiàn)快速存儲和檢索,但其缺點是其包含的元素是無序的,這導(dǎo)致它在存在大量迭代的情況下表現(xiàn)不佳。
  • LinkedHashMap保留了HashMap的優(yōu)勢,且其包含的元素是有序的。它在有大量迭代的情況下表現(xiàn)更好。
  • TreeMap能便捷的實現(xiàn)對其內(nèi)部元素的各種排序,但其一般性能比前兩種map差。
  • LinkedHashMap映射減少了HashMap排序中的混亂,且不會導(dǎo)致TreeMap的性能損失。

    總結(jié)

    以上是生活随笔為你收集整理的常见Java面试题 程序中如何决定使用 HashMap 还是 TreeMap?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。