每天進(jìn)步一點(diǎn)系列一:java的集合類的差別

java集合的體系結(jié)構(gòu)

List、Set、Map是這個(gè)集合體系中最主要的三個(gè)接口。

其中List和Set繼承自Collection接口。

Set不允許元素重復(fù)。HashSet和TreeSet是兩個(gè)主要的實(shí)現(xiàn)類。

List有序且允許元素重復(fù)。ArrayList、LinkedList和Vector是三個(gè)主要的實(shí)現(xiàn)類。

Map也屬于集合系統(tǒng),但和Collection接口不同。Map是key對(duì)value的映射集合,其中key列就是一個(gè)集合。key不能

重復(fù),但是value可以重復(fù)。HashMap、TreeMap和Hashtable是三個(gè)主要的實(shí)現(xiàn)類。

SortedSet和SortedMap接口對(duì)元素按指定規(guī)則排序,SortedMap是對(duì)key列進(jìn)行排序

1、Collection、Set和List的區(qū)別

Collection對(duì)象之間沒(méi)有指定的順序,允許有重復(fù)元素和多個(gè)null元素對(duì)象;它是Set和List接口的父類,是一種最通用型的集合接口;

Set各個(gè)元素對(duì)象之間沒(méi)有指定的順序,不允許有重復(fù)元素,最多允許有一個(gè)null元素對(duì)象;

List各個(gè)元素對(duì)象之間有指定的順序,允許重復(fù)元素和多個(gè)null元素對(duì)象;

2.LinkedList,ArrayList,Vector區(qū)別?

1)LinkedList鏈?zhǔn)皆L問(wèn),以指針相連,適合于在鏈表中間需要頻繁進(jìn)行插入和刪除操作。

2)ArrayList類似數(shù)組的形式,按照序號(hào)存儲(chǔ),隨機(jī)訪問(wèn)速度非常快。

3)Vector向量按照各元素序號(hào)存儲(chǔ),數(shù)組大小可以動(dòng)態(tài)增長(zhǎng),對(duì)于大容量數(shù)據(jù)存儲(chǔ)效率較高。

這些類的對(duì)比與選擇:

對(duì)于需要快速插入刪除元素,應(yīng)該使用Linkedlist

如果需要快速隨機(jī)訪問(wèn)元素,應(yīng)該選用Arraylist

如果程序在單線程環(huán)境中,選用非同步類Linkedlist、Arraylist

如果在多線程中,選用同步類vecto及其子類。

3、ArrayList和Vector有什么區(qū)別?HashMap和HashTable有什么區(qū)別?

Vector和HashTable是線程同步的(synchronized)。

性能上,ArrayList和HashMap分別比Vector和Hashtable要好。

List 是有序的

4、HashMap,HashTable,TreeMap,WeakHashMap的區(qū)別?ConcurrentHashMap區(qū)別?

HashTable:

(1)是一個(gè)包含單向鏈的二維數(shù)組,table數(shù)組中是Entry存儲(chǔ),entry對(duì)象;

(2)放入的value不能為空;

(3)線程安全的,所有方法均用synchronized修飾;

(4)枷鎖是鎖整個(gè)hash表;

HashMap:

(1)相當(dāng)于HashTable的升級(jí)版本;

(2)可以放入空值;

(3)基于hash表實(shí)現(xiàn);

(4)按插入的順序存儲(chǔ);

(5)線程不安全;

TreeMap :

(1)基于紅黑樹(shù)實(shí)現(xiàn);

(2)是有序的存儲(chǔ);

(3)自己可以定義排序器;

ConcurrentHashMap:

(1)放入的value不能為空;

(2)線程安全的;

(3)當(dāng)多線程對(duì)ConcurrentHashMap 操作時(shí),不是完全鎖住map, 而是鎖住相應(yīng)的

? ? ? ? ?segment,并發(fā)高于hashtable;

(4)遍歷性能低于hashMap;

WeakHashMap:

(1)HashMap的增強(qiáng)類,當(dāng)key被回收時(shí),可自動(dòng)刪除對(duì)應(yīng)key的那條記錄;

(2)其它同HashMap

Comparable接口與Comparator接口主要區(qū)別

1、前者是強(qiáng)行對(duì)是實(shí)現(xiàn)它的每個(gè)類的對(duì)象進(jìn)行整體排序,此類被稱為該類的自然排序,類的compareTo方法被稱為它的自然比較方法,實(shí)現(xiàn)此接口的對(duì)象列表和(數(shù)組)可以通過(guò)Collections.sort()或者Arrays.sort()進(jìn)行自動(dòng)排序。

2、Comparator位于包Java.util下,而Comparable位于包java.lang下,Comparable接口將比較代碼嵌入自身類中,而后者在一個(gè)獨(dú)立的類中實(shí)現(xiàn)比較。 如果類的設(shè)計(jì)師沒(méi)有考慮到Compare的問(wèn)題而沒(méi)有實(shí)現(xiàn)Comparable接口,可以通過(guò)? Comparator來(lái)實(shí)現(xiàn)比較算法進(jìn)行排序,并且為了使用不同的排序標(biāo)準(zhǔn)做準(zhǔn)備,比如:升序、降序。

示例:

Comparable接口

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容