1. 程式人生 > >面試中經常問到的集合問題

面試中經常問到的集合問題

幾天複習了Java集合的知識點,總結一下。

一.Vector和ArrayList的比較

1.Vector的方法是執行緒同步的,是執行緒安全的,ArrayList的方法不是,是執行緒不安全的。所以ArrayList比Vector的效能高。

2.兩者在擴容時不同,Vector是變為原來的兩倍,ArrayList是擴為原來的1.5倍。ArrayList相對來說比較節約記憶體空間。

3.Vector可以自定義增長因子,ArrayList不可以。

4.相同點是兩者的初始容量都為10.

使用場景:

因為Vector是執行緒安全的,所以在多執行緒情況下使用Vector,不考慮執行緒安全的因素的時候,一般使用ArrayList比較好。

二.ArrayList和LinkedList的比較。

1.ArrayList的是基於動態陣列的(地址是連續的),查詢和修改比較快;而LinkedList是基於創想迴圈連結串列的,增加和刪除操作     比較快。

2.ArrayList允許為空,LinkedList允許為NUll元素。

使用場景:

當需要對資料進行訪問時選用ArrayList,需要對資料進行增刪時選擇LinkedList。

三.HashSet和TreeSet的比較。

1.HashSet是hash表實現的,TreeSet時二叉樹實現的。

2.TreeSet中的資料是自動排好序的,不允許為為null;HashSet中的元素是無序的,可以為null但是能有一個。TreeSet和              HashSet中的元素都不能重複。

3.HashSet要求放入的元素必須實現hashcode()方法,因為HashSet判斷兩個元素是否相同實質上就是hashcode碼是否相        同。

適用場景:

因為HashSet是hash表實現的所以效能優於TreeSet,一般使用HashSet,當遇到排序問題時,則選擇TreeSet(因為TreeSet實現了SortedSet介面)。

四.HashMap和ConcurrentHashMap的比較。

1.HashMap是執行緒不安全的,而ConcurrentHashMap是執行緒安全的。

2.ConcurrentHashMap採用分段鎖機制實現執行緒安全,將整個Hash桶進行了分段segment,將大資料分成幾個小片段                segment,每個segment上有鎖存在。在插入元素的時候先找到相對應的segment和segment鎖,而後對其進行操作。

五.HashTable和ConcurrentHashMap的比較。

    兩者都是執行緒安全的,但是HashTable是在成員方法前加Synchronized鎖,當資料量較大時HashTable的效能比較低,因為迭代時需要被鎖住很長時間;而ConcurrentHashMap使用的是分段鎖機制(對區域性加鎖)。

六.集合中執行緒安全的有:Vector、Stack、HashTable、Enumeration(列舉)

七.解決Hash衝突的方法:拉鍊法、開放地址法、建立公共溢位區、再雜湊法。