更新時間:2021-06-04 11:12:51 來源:動力節點 瀏覽1221次
1.常見的集合有哪些?
Map接口和Collection接口是所有集合框架的父接口
Collection接口的子接口包括:Set接口和List接口
Map接口的實現類主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等
Set接口的實現類主要有:HashSet、TreeSet、LinkedHashSet等
List接口的實現類主要有:ArrayList、LinkedList、Stack以及Vector等
2.常見的集合底層實現
ArrayList底層是數組。
LinkedList底層是雙向鏈表。
HashMap底層與HashTable原理相同,Java 8版本以后如果同一位置哈希沖突大于8則鏈表變成紅黑樹。
HashTable底層是鏈地址法組成的哈希表(即數組+單項鏈表組成)。
HashSet底層是HashMap。
LinkedHashMap底層修改自HashMap,包含一個維護插入順序的雙向鏈表。
TreeMap底層是紅黑樹。
LinkedHashSet底層是LinkedHashMap。
TreeSet底層是TreeMap。
3.HashMap與HashTable的區別?
HashMap沒有考慮同步,是線程不安全的;Hashtable使用了synchronized關鍵字,是線程安全的;
HashMap允許K/V都為null;后者K/V都不允許為null;
4.ConcurrentHashMap和Hashtable的區別?
ConcurrentHashMap 結合了 HashMap 和 HashTable 二者的優勢。HashMap 沒有考慮同步,HashTable 考慮了同步的問題。但是 HashTable 在每次同步執行時都要鎖住整個結構。 ConcurrentHashMap 鎖的方式是稍微細粒度的。
5.ConcurrentHashMap實現原理
JDK1.7 : 【數組(Segment) + 數組(HashEntry) + 鏈表(HashEntry節點)】
ConcurrentHashMap(分段鎖) 對整個桶數組進行了分割分段(Segment),每一把鎖只鎖容器其中一部分數據,多線程訪問容器里不同數據段的數據,就不會存在鎖競爭,提高并發訪問率。
Segment是一種可重入鎖ReentrantLock,在ConcurrentHashMap里扮演鎖的角色,HashEntry則用于存儲鍵值對數據。
JDK1.8 : Node數組+鏈表 / 紅黑樹
利用CAS+Synchronized來保證并發更新的安全,底層依然采用數組+鏈表+紅黑樹的存儲結構。
6.ArrayList 和 Vector 的區別?
Vector 是線程安全的,ArrayList 是線程不安全的。
Vector在數據滿時增長為原來的兩倍,而 ArrayList在數據量達到容量的一半時,增長為原容量的1.5倍。
7.ArrayList和LinkedList的區別?
LinkedList基于鏈表的數據結構;ArrayList基于動態數組的數據結構
LinkedList 在插入和刪除數據時效率更高,ArrayList 查詢效率更高;
8.HashMap 默認的初始化長度是多少?
在JDK中默認長度是16,并且默認長度和擴容后的長度都必須是 2 的冪。
9.HashMap 構造方法中初始容量、加載因子的理解
初始容量代表了哈希表中桶的初始數量,即 Entry< K,V>[] table 數組的初始長度
加載因子是哈希表在其容量自動增加之前可以達到多滿的一種飽和度百分比,其衡量了一個散列表的空間的使用程度,負載因子越大表示散列表的裝填程度越高,反之愈小。
以上就是動力節點小編介紹的"Java集合面試題及答案",希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為您服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習