面試經常被問到set,map,list這幾個常用的數據集。
1 set map list各自特點
set不按照特定方式排序,繼承於Collection並且無重複值,允許出現空值,無序體現在插入順序和遍歷順序不一致。
set不重複的原理:set存儲時候會對值進行一次hashcode操作,計算出哈希值,然後通過移位等運算,計算出這個值應該存儲的位置,如果當前位置未被佔據則直接存儲值,如果已經存在數據,則調用該元素的equals方法再次進行比較,如果返回true,則值重複不允許存儲,如果爲false則繼續添加。
list 元素按照線性方式存儲,繼承於Collection可以存在重複值。
map按照鍵值對來存儲,未繼承Collection。
2 set map list各自內容
set
set下面有hashSet,treeSet
list下面有ArrayList LinkList Vector
map下面有hashMap,treeMap,hashTable
set查找時候採用的是二分法查找,速度較快。treeSet存儲值時候會自動將值進行排序
(二分法查找,先在順序固定的數組中,取出中間值進行比較,如果小於(或者大於中間值)再取對應區域內的中間值進行比較以此類推)
hashSet是哈希表結構,treeSet是紅黑樹結構,所以爲有序的。hashSet和treeSet都是線程不安全的。
list
list分爲ArrayList和LinkedList。ArrayList爲數組,LinkedList爲鏈表,數組查找速度快,但是增刪慢,因爲移動一個後面相關的都需要移動。LinkedList查找速度慢,增刪快,LinkedList增刪只需要拆掉之前兩個數對應關係和新的建立連接就可以。
map
HashMap,HashTable,TreeMap,LinkedHashMap
HashTable無序但線程安全,值與鍵值都不能爲null
TreeMap基於紅黑樹進行排序的map,默認是升序
LinkedHashMap 相當於一個棧,先進後出
HashMap線程不安全。