java HashMap,TreeMap與LinkedHashMap的詳解
java HashMap,TreeMap與LinkedHashMap的詳解
今天上午面試的時(shí)候 問到了Java,Map相關(guān)的事情,我記錯(cuò)了HashMap和TreeMap相關(guān)的內(nèi)容,回來趕緊嘗試了幾個(gè)demo理解下
package Map; import java.util.*; public class HashMaps { public static void main(String[] args) { Map map = new HashMap(); map.put("a", "aaa"); map.put("b", "bbb"); map.put("c", "ccc"); map.put("d", "ddd"); Iterator iterator = map.keySet().iterator(); while (iterator.hasNext()) { Object key = iterator.next(); System.out.println("map.get(key) is :" + map.get(key)); } Hashtable tab = new Hashtable(); tab.put("a", "aaa"); tab.put("b", "bbb"); tab.put("c", "ccc"); tab.put("d", "ddd"); Iterator iterator_1 = tab.keySet().iterator(); while (iterator_1.hasNext()) { Object key = iterator_1.next(); System.out.println("tab.get(key) is :" + tab.get(key)); } TreeMap tmp = new TreeMap(); tmp.put("a", "aaa"); tmp.put("b", "bbb"); tmp.put("c", "ccc"); tmp.put("d", "ddd"); tmp.put("a", "aba"); Iterator iterator_2 = tmp.keySet().iterator(); while (iterator_2.hasNext()) { Object key = iterator_2.next(); System.out.println("tmp.get(key) is :" + tmp.get(key)); } LinkedHashMap<String ,Integer> linkedHashMap = new LinkedHashMap<String,Integer>(); linkedHashMap.put("dasdsa", 1); linkedHashMap.put("gdsf",2); linkedHashMap.put("texvdfd", 3); linkedHashMap.put("bdada", 4); linkedHashMap.put("gdsf",3); for(String temp : linkedHashMap.keySet()){ System.out.println(temp); } } }
Map不同于 List, 底層使用 鍵值對(duì)的形式存儲(chǔ)數(shù)據(jù) Map.Entry是內(nèi)部的一個(gè)子條目,Map的不同實(shí)現(xiàn) 對(duì)鍵值對(duì)的索引方案不同
HashMap 本身是用hash函數(shù)對(duì)鍵值做索引 我們不能確定最后鍵值的順序
但是存在一個(gè)有趣的現(xiàn)象 就是在以Integer作為鍵值對(duì)的時(shí)候,當(dāng)位數(shù)為1位時(shí) 鍵值是按照從小到大排的,位數(shù)上升到兩位的時(shí)候 就可能存在問題
TreeMap 內(nèi)部存在著一個(gè)平衡樹來存儲(chǔ)著鍵值索引,TreeMap 把鍵值按照比較函數(shù)排序,我推測(cè)內(nèi)部是可能存在著一個(gè)AVLtree
LinkedHashMap 這個(gè)存在著一個(gè)特性是,鍵值對(duì)是按照插入順序排序的,如果存在著重復(fù)插入,以首次插入的順序來記,網(wǎng)上的一種說法是該結(jié)構(gòu)內(nèi)部存在著2重hash
一個(gè)解決順序問題,一個(gè)解決存儲(chǔ)問題,正確性待確認(rèn)
HashMap和TreeMap 是最常用的兩種Map結(jié)構(gòu), 一般來說HashMap的效率比較高,也最為常見,如果我們需要鍵值有序的話,我們才會(huì)用到TreeMap
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
SpringBoot整合redis中的JSON序列化文件夾操作小結(jié)
在我們?nèi)粘5捻?xiàng)目開發(fā)中,使用redis作為緩存,來提高系統(tǒng)訪問速度和緩解系統(tǒng)壓力,在使用中遇到幾個(gè)問題,本文給大家詳細(xì)總結(jié)下,對(duì)SpringBoot整合redis?JSON序列化相關(guān)知識(shí)感興趣的朋友一起看看吧2022-02-02IDEA在一個(gè)項(xiàng)目空間下管理多個(gè)項(xiàng)目的操作方法
這篇文章主要介紹了IDEA如何在一個(gè)項(xiàng)目空間下管理多個(gè)項(xiàng)目,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04Spring中的@ExceptionHandler注解統(tǒng)一異常處理詳解
這篇文章主要介紹了Spring中的@ExceptionHandler注解統(tǒng)一異常處理詳解,當(dāng)我們使用這個(gè)@ExceptionHandler注解時(shí),定義一個(gè)異常的處理方法,加上@ExceptionHandler注解,這個(gè)方法就會(huì)處理類中其他方法拋出的異常,需要的朋友可以參考下2024-01-01

關(guān)于Spring配置文件加載方式變化引發(fā)的異常詳解

spring學(xué)習(xí)JdbcTemplate數(shù)據(jù)庫(kù)事務(wù)管理

mybatis-plus IdWorker生成的Id和返回給前臺(tái)的不一致的解決

feign開啟日志Logger.Level?feignLoggerLevel()中Level爆紅的解決

json如何解析混合數(shù)組對(duì)象到實(shí)體類的list集合里去