java基礎知識記錄--集合

1.List和Map區別:

 

1)  list是存儲單列數據的集合,Map是存儲鍵和值這樣的雙列數據的集合

2)  list 中存儲的數據是有順序,並且允許重複;Map中存儲的數據是沒順序的,其鍵是不能重複的,值可以重複。

 

2. List,Set,Map是否繼承自Collection接口

    List和Set是繼承自Collection接口,Map不是

 

3. List 、Map、Set三個接口,存取元素時,各有什麼特點:

     首先,List和Set具有相似性,它們都是單列元素的集合,所以,它們由一個共同的父接口,叫Collection。

     1)Set

          Set裏面不允許有重複的元素,所謂重複,即不能有兩個相等的對象。

          Set集合通過add方法存對象,該方法有一個boolean的返回值,當集合中沒有某個元素時,add方法可成功加入該元素,並返回true,否則返回false。

          Set取元素時,沒法說取第幾個,只能以Iterator接口取得所有的元素,再逐一遍歷各個元素。

    2)List

         List表示有先後順序的集合。可調用add(int index,Objecet)方法,指定當前對象在集合中的存放位置。

         List除了可以從Iterator接口取得所有的元素,再逐一遍歷各個元素之外,還可以調用get(index i)來明確說明取第幾個。

   3)Map

        Map與List和Set不同,它是雙列的集合,其中有put方法,定義如下:put(obj key,obj value),每次存儲時,要存儲一對key/value,不能存儲重複的key,這個重複的規則也是按equals比較相等。

        取可以根據key獲得相應的value,即get(Object key)返回值爲key所對應的value。另外,也可以獲得所有的key的結合,還可以獲得key和value組合成的Map.Entry對象的集合。

 

4. ArrayList Vector LinkedList的存儲性能和特性

    ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於世紀存儲的數據以便增加和插入元素,他們都允許直接按序號索引元素,但是插入元素要設計數組元素移動等內存操作,所以索引數據快而插入數據慢。

    vector由於使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入數據較快。

     LinkedList也是縣城不安全的,LinkedList提供了一些方法,使得LinkedList可以被當做堆棧和隊列來使用。

 

5.Collection和Collections的區別:

   Collection是集合類的上級接口,繼承與它的接口主要有Set和List。

   Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作。

 

6. Collection框架中實現比較要實現的接口: comparable/comparator

 

7. ArrayList和Vector的區別:

   相同點:

             這兩個類都實現了List接口(List接口繼承了Colection接口),他們都是有序集合,即存儲在這兩個集合中的元素的位置都是有順序的,相當於一種動態的數組,我們以後可以按位置索引號取出某個元素,並且 其中的數據是允許重複的,這事HashSet之類的結合的最大不同,HashSet之類的集合不可以按索引號去檢索其中的元素,也不允許有重複的元素。

     區別:

           (1)同步性

                   Vector是線程安全的,也就是說它的方法之間是線程同步的,而ArrayList是線程不安全的,它的方法之間是線程不同步的。如果只有一個線程會訪問到集合,那最好是使用ArrayList,因爲它不考慮線程安全,效率會高一些;如果有多個線程會訪問集合,那最好是使用Vector,因爲不需要我們自己再去考慮和編寫線程安全的代碼。

         (2)數據增長

                ArrayList和Vector都有一個初始的容量大小,當存儲進他們裏面的元素的個數超過了容量時。就需要增加ArrayList和Vector的存儲空間,每次要增加存儲空間時,不是隻增加一個存儲單元,而是增加多個存儲單元,每次增加的存儲單元的個數在內存空間利用和程序效率之間要取得一定的平衡。

 

8. HashMap和Hashtable的區別:

    相同點:

     HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區別在於HashMap允許空(null)鍵值(key),由於非線程安全,在只有一個線程訪問的情況下,效率要高於Hashtable。

    HashMap允許將null作爲一個entry的key獲知value,而Hashtable不允許。

    HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因爲contains方法容易讓人引起誤解。

    Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。

    最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己爲它的方法實現同步,而HashMap就必須爲之提供外同步。

     就HahsMap和Hashtable主要從三個方面來說:

    一、歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java1.2引進的Map接口的一個實現

    二、同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程不安全的,不是同步的

    三、值:只有HashMap可以讓你將空值作爲一個表的key或value


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