java HashMap,TreeMap與LinkedHashMap的詳解
java HashMap,TreeMap與LinkedHashMap的詳解
今天上午面試的時候 問到了Java,Map相關(guān)的事情,我記錯了HashMap和TreeMap相關(guān)的內(nèi)容,回來趕緊嘗試了幾個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, 底層使用 鍵值對的形式存儲數(shù)據(jù) Map.Entry是內(nèi)部的一個子條目,Map的不同實現(xiàn) 對鍵值對的索引方案不同
HashMap 本身是用hash函數(shù)對鍵值做索引 我們不能確定最后鍵值的順序
但是存在一個有趣的現(xiàn)象 就是在以Integer作為鍵值對的時候,當(dāng)位數(shù)為1位時 鍵值是按照從小到大排的,位數(shù)上升到兩位的時候 就可能存在問題
TreeMap 內(nèi)部存在著一個平衡樹來存儲著鍵值索引,TreeMap 把鍵值按照比較函數(shù)排序,我推測內(nèi)部是可能存在著一個AVLtree
LinkedHashMap 這個存在著一個特性是,鍵值對是按照插入順序排序的,如果存在著重復(fù)插入,以首次插入的順序來記,網(wǎng)上的一種說法是該結(jié)構(gòu)內(nèi)部存在著2重hash
一個解決順序問題,一個解決存儲問題,正確性待確認
HashMap和TreeMap 是最常用的兩種Map結(jié)構(gòu), 一般來說HashMap的效率比較高,也最為常見,如果我們需要鍵值有序的話,我們才會用到TreeMap
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
java如何將map數(shù)據(jù)存入到實體類對象中
在Java編程中,經(jīng)常需要將Map集合中的數(shù)據(jù)轉(zhuǎn)換為實體類對象,這可以通過反射機制實現(xiàn),即通過遍歷Map對象,使用反射根據(jù)鍵名對應(yīng)實體類的屬性名,動態(tài)調(diào)用setter方法將值設(shè)置到實體對象中,這樣的操作使得數(shù)據(jù)從Map結(jié)構(gòu)轉(zhuǎn)移到了具體的JavaBean中,便于后續(xù)的操作和管理2024-09-09
關(guān)于ZooKeeper的會話機制Session解讀
這篇文章主要介紹了關(guān)于ZooKeeper的會話機制Session解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
springboot項目整合druid數(shù)據(jù)庫連接池的實現(xiàn)
這篇文章主要介紹了springboot項目整合druid數(shù)據(jù)庫連接池的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

