HashMap源碼學習——初識,雲裏霧裏

作爲才從事java開發的工作的小白來說,很多時候我們僅僅知道一些類的使用方法,而對於這個類的底層實現,我們卻很少關注。例如一個我們經常使用的集合類HashMap,我們知道通過put存入數據,通過get取數據,卻不知道它底層這些方法是怎麼實現的。由於它的使用的高頻性和在面試中常被問到,今天我們就帶着求知的態度,來深入瞭解一下這個HashMap。

本節,我們先來講一講HashMap的大致輪廓,詳細的核心實現後再後續章節說明。

1.簡述

HashMap是基於java集合中Map接口實現,元素是以鍵值對的形式存儲,並且允許key=null,和value=null。由於HashMap不允許重複,所以只能有一個key=null的情況出現,而且HaspMap是無序的,不能保證元素存存入的順序,也就是說,HashMap不能保證輸出順序和存存入順序一致。最後一個特性就是HashMap不能保證線程安全,這一點與HashTable相反。

2.基本結構

HashMap的基本組成是:jdk1.7及之前是數組+鏈表;jdk1.8之後是數組+鏈表+紅黑樹

3.繼承關係

public class HashMap<K,V>extends AbstractMap<K,V>
                            implements Map<K,V>, Cloneable, Serializable

AbstractMap:Map接口的實現類之一,也是 HashMap, TreeMap, ConcurrentHashMap 等類的父類

Map:java集合Collection的兩個重要接口之一;

Cloneable:一個標記接口,只有實現這個接口後,在類中重寫Object中的clone方法,然後通過類調用clone方法才能克隆成功,如果不實現這個接口,則會拋出CloneNotSupportedException(克隆不被支持)異常;

Serializable:一個對象序列化的接口,一個類只有實現了Serializable接口,它的對象才能被序列化。

4.HashMap基本方法

1)增加元素

public V put(K key, V value)

想HashMap集合中添加鍵爲key,值爲value的元素;若map中原來存有鍵爲key的舊元素,則返回該元素的值value,否則,則返回null;

 //存放值
 Map<Integer, String> map1 = new HashMap<>();
 map1.put(1, "aa");
 String oldValue = map1.put(1, "bb");
 System.out.println(oldValue);

結果:

2)獲取值

public V get(Object key)

從HashMap集合中獲取鍵爲key的元素的值。

 //獲取值
 Map<Integer, String> map2 = new HashMap<>();
 map2.put(2, "aabb");
 String newValue = map2.get(2);
 System.out.println(newValue);

結果:

3)刪除元素

public V remove(Object key)

從HashMap中刪除指定key的元素。

//刪除元素
Map<Integer, String> map3 = new HashMap<>();
map3.put(1, "aa");
map3.put(2, "bb");
map3.put(3,"cc");
map3.remove(2);
String value = map3.get(2);
System.out.println(value);

返回爲null,說明元素已經被刪除。

4)判斷HashMap是否爲空

public boolean isEmpty()
HashMap<String, Integer> map=new HashMap<>();
System.out.println(map.isEmpty());//true
map.put("DEMO", 1);
System.out.println(map.isEmpty());//false

5)清空HashMap集合中的元素

public void clear()
/清空元素
        HashMap<String, Integer> map=new HashMap<>();
        map.put("a", 1);
        map.put("b", 2);
        System.out.println(map);
        map.clear();
        System.out.println(map);

結果:

還有很多方法,這裏就不在一一舉例了。

小結

介紹到這裏,我們基本知道了HashMap是什麼以及能幹什麼有了一個大概的瞭解。但是想要深入瞭解HashMap,就需要我們去查看HashMap的源代碼,好好分析一下它是如何實現這些功能的。

後續將會針對HashMap的源碼,詳細查看它的底層實現。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章