电竞比分网-中国电竞赛事及体育赛事平台

分享

Vector、 ArrayList 、List、 Set、 Map

 melodyjian 2017-03-10
在Java中提供了Collection和Map接口。其中List和Set繼承了Collection接口;同時用Vector、ArrayList、LinkedList三個類實現(xiàn)List接口,HashSet、TreeSet實現(xiàn)Set接口。直接有HashTable、HashMap、TreeMap實現(xiàn)Map接口。

      Vector基于Array的List,性能也就不可能超越Array,并且Vector是“sychronized”的,這個也是Vector和ArrayList的唯一的區(qū)別。

       ArrayList:同Vector一樣是一個基于Array的,但是不同的是ArrayList不是同步的。所以在性能上要比Vector優(yōu)越一些。

       LinkedList:不同于前面兩種List,它不是基于Array的,所以不受Array性能的限制。當(dāng)對LinkedList做添加,刪除動作的時候只要更改nextNode的相關(guān)信息就可以實現(xiàn)了所以它適合于進(jìn)行頻繁進(jìn)行插入和刪除操作。這就是LinkedList的優(yōu)勢。

    List:

        1. 所有的List中只能容納單個不同類型的對象組成的表,而不是Key-Value鍵值對。例如:[ tom,1,c ];

        2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];

        3. 所有的List中可以有null元素,例如[ tom,null,1 ];

        4. 基于Array的List(Vector,ArrayList)適合查詢,而LinkedList(鏈表)適合添加,刪除操作。

雖然Set同List都實現(xiàn)了Collection接口,但是他們的實現(xiàn)方式卻大不一樣。List基本上都是以Array為基礎(chǔ)。但是Set則是在HashMap的基礎(chǔ)上來實現(xiàn)的,這個就是Set和List的根本區(qū)別。

     HashSet:HashSet的存儲方式是把HashMap中的Key作為Set的對應(yīng)存儲項,HashMap的key是不能有重復(fù)的。HashSet能快速定位一個元素,但是放到HashSet中的對象需要實現(xiàn)hashCode()方法0。

    TreeSet:將放入其中的元素按序存放,這就要求你放入其中的對象是可排序的。TreeSet不同于HashSet的根本 是TreeSet是有序的。它是通過SortedMap來實現(xiàn)的。

    Set總結(jié): 1. Set實現(xiàn)的基礎(chǔ)是Map(HashMap); 2. Set中的元素是不能重復(fù)的,如果使用add(Object obj)方法添加已經(jīng)存在的對象,則會覆蓋前面的對象,不能包含兩個元素e1、e2(e1.equals(e2))。

    Map是一種把鍵對象和值對象進(jìn)行關(guān)聯(lián)的容器,Map有兩種比較常用的實現(xiàn): HashTable、HashMap和TreeMap。

    HashMap也用到了哈希碼的算法,以便快速查找一個鍵,

    TreeMap則是對鍵按序存放,因此它有一些擴(kuò)展的方法,比如firstKey(),lastKey()等。

    HashMap和Hashtable的區(qū)別。 HashMap允許空(null)鍵(key)或值(value),由于非線程安全,效率上可能高于Hashtable。 Hashtable不允許空(null)鍵(key)或值(value)。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多