1. 程式人生 > >Java集合常見面試題(一)

Java集合常見面試題(一)

集合和陣列的區別:

1:陣列是固定長度的;集合可變長度的。

2:陣列可以儲存基本資料型別,也可以儲存引用資料型別;集合只能儲存引用資料型別

3:陣列儲存的元素必須是同一個資料型別;集合儲存的物件可以是不同資料型別。

1.ArrayList和LinkedList的區別

ArrayList(陣列結構):

        優點:get和set呼叫花費常數時間,也就是查詢的速度快;

        缺點:新項的插入和現有項的刪除代價昂貴,也就是新增刪除的速度慢

LinkedList(連結串列結構):

        優點:新項的插入和和現有項的刪除開銷很小,即新增和刪除的速度快

        缺點:對get和set的呼叫花費昂貴,不適合做查詢

2.Collection介面的remove()方法和Iterator介面的remove()方法區別?

①效能方面

    Collection的remove方法必須首先找出要被刪除的項,找到該項的位置採用的是單鏈表結構查詢,單鏈表查詢效率比較低,需要從集合中一個一個遍歷才能找到該物件;

    Iterator的remove方法結合next()方法使用,比如集合中每隔一項刪除一項,Iterator的remove()效率更高

②容錯方面

    在使用Iterator遍歷時,如果使用Collection的remove則會報異常,會出現ConcurrentModificationException,因為集合中物件的個數會改變而Iterator 內部物件的個數不會,不一致則會出現該異常

    在使用Iterator遍歷時,不會報錯,因為iterator內部的物件個數和原來集合中物件的個數會保持一致

3、Array與ArrayList有什麼區別

①Array是Java中的陣列,宣告陣列有三種方式

在定義一個數組的時候,必須指定這個陣列的資料型別及陣列的大小,也就是說陣列中存放的元素個數固定並且型別一樣

②ArrayList是動態陣列,也就是陣列的複雜版本,它可以動態的新增和刪除元素,被稱為”集合“,在不使用泛型的情況下,這個list是可以新增進不同型別的元素的,而且arraylist是可以不用指定長度的。在使用泛型時,我們就只能新增一種型別的資料了

4.怎樣將一個數組轉成List,有什麼方法

①陣列轉list,可以使用Arrays.asList(陣列)

②List轉陣列,使用list.toArray()

5.HashSet、TreeSet、LinkedHashSet區別?

可以從集合的使用場合回答面試官

①.需要速度快的集合,使用HashSet

②.需要集合有排序功能,使用TreeSet

③.需要按照插入的順序儲存集合,使用LinkedHashSet

7.HashMap和HashSet區別

a. HashMap實現了Map介面,HashSet實現了Set介面

b.HashMap儲存鍵值對,HashSet儲存物件

c.HashMap呼叫put()向map中新增元素,HashSet呼叫add()像set中新增元素

d.HashMap使用Key計算hasncode,HashSet使用成員計算Hashcode

HashMap相對於HashSet較快,因為它是使用唯一的鍵獲取物件

HashSet較HashMap來說比較慢

8.HashMap的實現原理

1、通過put和get儲存和獲取物件,

2、儲存物件時,我們將K/V傳給put方法時,它呼叫hashcode計算hash從而得到bucket位置,進一步儲存,HashMap會根據當前bucket的佔用情況自動調整容量。

3、獲取物件時,我們將K傳遞給get,他呼叫hashcode計算hash從而得到bucket位置,並進一步呼叫equals()方法確認鍵值對。

9、HashMap和Hashtable的區別:

    1、hashMap不是執行緒安全的,而hashtable是執行緒安全的、

    2、hashMap允許空的值和空的值,而hashtable則不允許。

   3、hashMap的效能要優於hashtable.