各種集合類型底層實現原理  澤0715…


Set和Map的關係
Set代表無序,不能重複的集合;Map代表Key-Value組成的集合,是一種關聯數組。Map的Key要求是不能重複,沒有順序。把Map的所有Key組合起來就是Set。Set keySet();


HashMap和HashSet原理
HashMap底層是用數組鏈表存儲的,元素是Entry。向HashMap添加時,由key的hashcode決定Entry存儲位置,當兩個Entry對象的key的hashcode相同時,由key的equals()方法返回值決定採用覆蓋行爲(返回true),還是在鏈表頭添加新的Entry(返回false)。Collection values(),返回集合對象,但不能添加元素,主要是用來遍歷。自定義類如果放入HashMap或HashSet中,需要重寫equals和hashcode方法。

 


HashSet s = new HashSet

s.add(new Name("1"));

System.out.println(s.contains(new Name("1")));
如果不對Name類重寫hashcode,equals,輸出結果是false。因爲默認的不能保證結果一樣。


TreeMap和TreeSet原理
TreeMap底層是用紅黑樹來存儲,每個Entry對應樹的一個節點,TreeMap元素默認從小到大排序。V put(Key k, Value v)實質是二叉排序樹的插入算法

ArrayList底層是數組
List是線性表的數據結構,ArrayList是順序存儲的線性表

LinkedList底層是鏈表
LinkedList是鏈式存儲的線性表,實質是雙向鏈表,實現了List和Deque接口。Deque代表雙端隊列,既可以當做隊列也可以當作棧。

Vector和ArrayList區別
Vector提供synchronized修飾方法,是線程安全版本的ArrayList
.Vector 本質是一個數組,其實所有集合都是數組,從JAVA 來說搞成了對象,符合我  們的OO,可以參考學習。
Iterator迭代器
用於迭代Collection集合,包括Set和List。集合提供iterator()方法
迭代器模式:系統爲遍歷集合提供標準的“迭代器接口”,用於訪問集合裏的數據,如何實現交給集合自己完成。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章