2020-12-29
Java集合常見面試題彙總
1. 寫出 List、Set、Map的各自特點
List介面:
儲存任意型別的Object物件,有序、有下標、元素可以重複;
下標範圍:0~元素個數-1 0~size()-1
Set集合:
無序、無下標、元素內容不允許重複;
Map集合:
(1) Map以鍵值對形式儲存(key-value)。
(2) 鍵:無序、無下標、元素不允許重複(唯一)。
(3) 值:無序、無下標、元素內容允許重複。
2. 寫出 ArrayList 和 Vector的區別
a. ArrayList:
底層以陣列實現,查詢效率快,增刪效率慢
JDK1.2版本,執行緒不安全,併發效率相對高
b. Vector:
底層以陣列實現,查詢效率快,增刪效率慢
JDK1.0 版本,執行緒安全,併發效率低
3. 寫出 ArrayList 和 LinkedList的區別
a. ArrayList:
底層以陣列實現,查詢效率快,增刪效率慢
JDK1.2版本,執行緒不安全,併發效率相對高
b LinkedList:
底層以連結串列實現,查詢效率相對較低,增刪效率相對快
擴充:陣列在記憶體空間連續:記憶體空間利用率相對不高 (定址方便)
連結串列在記憶體空間不連續:記憶體空間利用相對較高 (定址相對麻煩)
4. 寫出 HashSet如何保證元素內容不重複
I. 如果保證HashSet中儲存內容不同的物件,需要做到以下兩點:
a. 覆蓋 hashCode方法
① 原則:必須保證內容相同的物件返回相同的雜湊碼值;
為了提高效率,儘可能做到內容不同的物件返回不同雜湊碼值
② 覆蓋:將所有的屬性值拼湊為一個 int 的整數作為返回值返回
b. 覆蓋 equals方法
① 必須保證內容相同返回 true,拒絕新增元素
② 內容不同的物件返回值為false,則成功新增
II. 執行原理:當一個物件往 HashSet集合中儲存時,先呼叫當前物件的
hashCode方法,獲取對應儲存下標(為了保證內容相同的物件不新增
到HashSet集合中,通常將 hashCode方法給與覆蓋),儲存下標位置
上沒有任何元素,則直接將物件儲存在對應下標位置上,但是如果下標
位置上已經儲存了其他元素,則呼叫 該物件 equals方法(為了保證
內容不同通常覆蓋 equals方法),equals方法返回值為true,代表
內容相同物件,則拒絕新增到集合中,如果返回值為false,則成功添
加到對應下標位置,此時採用陣列+連結串列形式進行儲存。
5. 寫出 HashMap 和 Hashtable 的區別
(1) HashMap:
JDK1.2版本,執行緒不安全,併發效率快,允許null作為
key/value
(2) Hashtable:
JDK1.0版本,執行緒安全,併發效率低,不允許null作為
key/value
6. 簡述 HashMap的儲存原理
HashMap: 儲存元素時獲取key的雜湊碼值(通過鍵對應物件的hashCode方法),
獲取雜湊碼值與底層儲存時陣列取餘得到儲存下標,第一種情況儲存
下標上沒有元素,則直接新增(將key和value一起儲存);第二種情
況,儲存下標位置上如果有元素,則呼叫key對應儲存物件的equals
方法,判斷下標衝突的物件內容是否相同,equals方法結果為true,
代表內容相同,則拒絕新增,equals方法結果為false,代表內容不
同,此時採用陣列+連結串列形式進行儲存
HashMap應用注意細節: 如果自定型別的物件作為HashMap的鍵進行儲存,為了
保證元素內容不重複,需要覆蓋 hashCode和equals方法(規則等價於
HashSet);但是實際開發應用,通常使用 Integer、String作為
HashMap的key型別
注意:HashSet底層實際封裝了一個 HashMap
7. 簡述 Comparator 和 Comparable的區別
Comparator是外接比較器,實現方法 compare(Tt1,T t2);
Comparable是內建比較器,實現方法 compareTo(Tt)方法;
8. 簡述 Java中集合框架