java面試題:集合總結

1.集合與數組

數組(可以存儲基本數據類型)是用來存現對象的一種容器,但是數組的長度固定,不適合在對象數量未知的情況下使用。

集合(只能存儲對象,對象類型可以不一樣)的長度可變,可在多數情況下使用。

2.幾種重要的接口和類簡介

1、List(有序、可重複)
List裏存放的對象是有序的,同時也是可以重複的,List關注的是索引,擁有一系列和索引相關的方法,查詢速度快。因爲往list集合裏插入或刪除數據時,會伴隨着後面數據的移動,所有插入刪除數據速度慢。

2、Set(無序、不能重複)
Set裏存放的對象是無序,不能重複的,集合中的對象不按特定的方式排序,只是簡單地把對象加入集合中。

3、Map(鍵值對、鍵唯一、值不唯一)
Map集合中存儲的是鍵值對,鍵不能重複,值可以重複。根據鍵得到值,對map集合遍歷時先得到鍵的set集合,對set集合進行遍歷,得到相應的值。

對比如下:

3.ArrayList、LinkedList、Vector的區別 

  • Arraylist和Vector是採用動態數組的數據結構,LinkedList基於鏈表的數據結構
  • 對於隨機訪問get和set,ArrayList優於LinkedList,因爲ArrayList可以隨機定位,而LinkedList要移動指針一步一步的移動到節點處。
  • 對於新增和刪除操作add和remove,LinedList比較佔優勢,只需要對指針進行修改即可,而ArrayList要移動數據來填補被刪除的對象的空間。
  • Vector使用了synchronized方法-線程安全,性能上比ArrayList差一點
  • ArrayList數組的起始容量是10.當數組需要增長時,新容量=(舊容量*3)/2+1,也就是說每一次容量大概會增長50%。
  • Vector數組的起始容量是10,可以自定義初始容量,新容量=新容量+舊容量
     

4.HashTable與HashMap的區別

1.同步性:Hashtable是線程安全的,可以用於多線程中,而HashMap是線程序不安全的,只能用於單線程中。

2.HashMap的key和value可以爲空,HashTable的不可以爲空。

5.HashMap與TreeMap

1、HashMap是通過hashcode()對其內容進行快速查找的;HashMap中的元素是沒有順序的;

    TreeMap中所有的元素都是有某一固定順序的,如果需要得到一個有序的結果,就應該使用TreeMap;

2、HashMap和TreeMap都不是線程安全的;

3、HashMap繼承AbstractMap類;覆蓋了hashcode() 和equals() 方法,以確保兩個相等的映射返回相同的哈希值;

     TreeMap繼承SortedMap類;他保持鍵的有序順序;

4、HashMap:基於hash表實現的;使用HashMap要求添加的鍵類明確定義了hashcode() 和equals() (可以重寫該方法);爲了優化HashMap的空間使用,可以調優初始容量和負載因子;

     TreeMap:基於紅黑樹實現的;TreeMap就沒有調優選項,因爲紅黑樹總是處於平衡的狀態;

5、HashMap:適用於Map插入,刪除,定位元素;

     TreeMap:適用於按自然順序或自定義順序遍歷鍵(key);
 

總結的不全,還需要補充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章