ArrayList和LinkedList的底層原理,動態擴容,hashMap的底層原理,動態擴容


1.ArrayList底層是基於數據的,對於查詢可以快速的定位到元素,對於插入和刪除需要數據移動性能較差(底層基於數組,動態擴容)

2.LinkedList底層是基於鏈表的,對於查詢需要遍歷鏈表,性能較差,對於插入和刪除只需要修改指針指向即可。

HashMap1.7底層結構是:數組+鏈表

                1.8底層結構是:數組+鏈表+紅黑樹,當鏈表長度達到8時,變成紅黑樹

HashMap和HashTable的區別:

由於Hashtable是線程安全的也是synchronized,所以在單線程環境下它比HashMap要慢。如果你不需要同步,只需要單一線程,那么使用HashMap性能要好過Hashtable。

1)key和value的取值范圍不同

HashMap和HashTable都是基於哈希表來實現鍵值映射的工具類,底層都是哈希表結構。
HashMap允許鍵為null,值為null,對於HashMap如果使用get方法返回null,並不能表明HashMap不存在這個key,有可能是鍵對應的值為null。
HashTable則不允許null鍵和null值。

2)HashMap是非synchronized的,而HashTable是synchronized的。

HashMap和TreeMap的區別:

1)HashMap和TreeMap(TreeMap:基於紅黑樹實現的,紅黑樹總是處於平衡的狀態)的區別:

HashMap是通過hashcode()對其內容進行快速查找,hashmap中的數據是沒有順序的。

TreeMap中所有的元素都是有某一固定順序的,如果需要得到一個有序的結果,就應該使用treemap。

2)HashMap和TreeMap都是線程不安全的。

3)HashMap:適用於Map插入,刪除,定位元素;

TreeMap:適用於按自然順序或自定義順序遍歷鍵(key);

4)總結 
HashMap通常比TreeMap快一點(樹和哈希表的數據結構使然),建議多使用HashMap,在需要排序的Map時候才用TreeMap。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM