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接口