java集合--collection集合


1、畫出collection的框架圖

  集合主要包含collection和map兩個接口。其中collection中的元素是一個value值,map中的元素是key:value形式的。

  collection包含set、list、queue。

    (1)list:list接口包含ArrayList,Vector,LinkedList。

    (2)set包含HashSet,TreeSet,EnumSet。

    (3)Queueu包含LinkedList,PriorityQueue

  map包含HashMap,HashTable,TreeMap,WeakHashMap,IdentityHashMap,EnumMap

 

 

2、詳述List、Map、Set的區別?(底層實現的數據結構不同)

   (1)List:有序,可重復。

    ArrayList:底層實現的數據結構是數組,查詢快,增刪慢。線程不安全,效率高

    LinkedList:底層實現的數據結構是鏈表,查詢慢,增刪塊。線程不安全,效率高

    Vector:底層實現的數據結構是數組,查絢塊,增刪慢。線程安全,效率低。

  (2)Set:無序,唯一。

    HashSet:底層數據結構是哈希表(無序,唯一)。保證元素唯一性依賴於兩個方法:hashCode()和equals()

    LinkedHashSet:底層數據結構是鏈表和哈希表。(FIFO,有序,唯一)。通過鏈表保證有序性, 通過哈希表保證唯一性。

    TreeSet:底層數據結構是紅黑樹。(唯一,有序)

  一般。ArrayList和HashSet用的比較廣泛。如果明確知道需要線程安全或者有序,就根據集合的具體特點選擇使用哪一個集合。Set和List都是單列元素的集合,父接口都是Colelction,有一定的相似之處。

List表示有先后順序的集合, 按元素先來后到的元素進行插入,當然,可以插隊,使用add(int index,object e)指定元素的位置。其實並不是把對象本身存儲在集合里,而是在集合中用一個索引變量指向這個對象,當集合中包含多個同樣的對象時,是多個索引指向同一個對象。List除了可以以Iterator接口取得所有的元素,再逐一遍歷各個元素之外,還可以調用get(index i)來明確說明取第幾個。

Set里面不允許有重復的元素,即不能有兩個相等(注意,不是僅僅是相同equals)的對象。所以,Set集合的add方法有一個boolean的返回值,當集合中沒有某個元素,此時add方法可成功加入該元素時,則返回true,當集合含有與某個元素equals相等的元素時,此時add方法無法加入該元素,返回結果為false。Set取元素時,沒法說取第幾個,只能以Iterator接口取得所有的元素,再逐一遍歷各個元素。

  (3)Map中常用的是Hash Map,HashMap,HashTable,TreeMap。

    TreeMap:有序

    HashMap:無序,線程不安全,效率高

    HashTable:無序,線程安全,效率低。

    HashMap和hashTable的區別:

        Hashtable不允許null值,HashMap允許null值(key和value都允許)

        Hashtable是Java1.1的一個類,它基於陳舊的Dictionary類。而HashMap是Java1.2引進的Map接口的一個實現。

        Hashtable是線程安全的,而HashMap是線程不安全的。如果對同步性或與遺留代碼的兼容性沒有任何要求,建議使用HashMap。 查看Hashtable的源代碼就可以發現,除構造函數外,Hashtable的所有 public 方法聲明中都有 synchronized關鍵字,而HashMap的源碼中則沒有。

Map和List、Set不同,是雙列元素的集合,不允許重復的key(equals),通過put(obj key,obj value)將元素存儲到map集合中。取值時通過get(Object key),或者通過map.keySet(),map.values(),map.entrySet()獲得keys,values的信息。

總結:List 以特定次序來持有元素,可有重復元素。Set 無法擁有重復元素,內部排序。Map 保存key-value值,value可多值。

3、List時如何擴容的?

lsit初始化的長度是10,當長度達到10時,再新增數據會進行擴容。每次擴容為1.5倍+1,並將之前的數據copy到新的array中去。發現不同jdk是不一樣的,關於(1.5倍+1)出現在jdk1.6,其他1.7和1.8都是(1.5倍擴容)。

4、HashSet的底層實現是?

HashMap,主要利用了HashMap的鍵不可重復的特性。

5、Iterator的機制?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM