一直都不敢對這個(gè)系列的類入手,首先感覺太復(fù)雜了,但是我最終還是說服了自己咬咬牙,還是來看看,先在網(wǎng)上搜了一下關(guān)于這個(gè)方面的
文章感覺是這個(gè)方面的知識跟一些數(shù)學(xué)知識聯(lián)系起來看還是可以找到頭緒的。
首先就是集合的概念包括一些集合的運(yùn)算,象交,并,包含的關(guān)系,映射也是屬于集合但是java里的映射Map接口并不是繼承自Collection。
好了,首先我們來看看
Collection接口:
Collection接口用于表示任何對象或元素組。想要盡可能以常規(guī)方式處理一組元素時(shí),就使用這一接口。
該接口支持如添加和除去等基本操作。設(shè)法除去一個(gè)元素時(shí),如果這個(gè)元素存在,除去的僅僅是集合中此元素的一個(gè)實(shí)例。
boolean add(Object element)
boolean remove(Object element)
Collection接口還支持查詢操作:
int size()
boolean isEmpty()
boolean contains(Object element)
Iterator iterator()
Collection接口支持的其它操作,要么是作用于元素組的任務(wù),要么是同時(shí)作用于整個(gè)集合的任務(wù)。
boolean containsAll(Collection collection)
boolean addAll(Collection collection)
void clear()
void removeAll(Collection collection)
void retainAll(Collection collection)
containsAll()方法允許您查找當(dāng)前集合是否包含了另一個(gè)集合的所有元素,即另一個(gè)集合是否是當(dāng)前集合的
子集。其余方法是可選的,因?yàn)樘囟ǖ募峡赡懿恢С旨细摹ddAll()方法確保另一個(gè)集合中的所有
元素都被添加到當(dāng)前的集合中,通常稱為并。clear()方法從當(dāng)前集合中除去所有元素。removeAll()方法類似于
clear(),但只除去了元素的一個(gè)子集。retainAll()方法類似于removeAll()方法,不過可能感到它所做的與前
面正好相反:它從當(dāng)前集合中除去不屬于指定集合的元素,即交。
List接口:
繼承Collection以實(shí)現(xiàn)一個(gè)允許有重復(fù)項(xiàng)的有序集合,添加了索引項(xiàng),和ListIterator迭代器(可以雙向迭代)
另外函數(shù)subList(int from, int end)遵循前包后不包的原則(也就是返回的List只包含下標(biāo)為
第from,from+1,...end-1個(gè)元數(shù)),
實(shí)現(xiàn)類:
ArrayList,LinkedList,區(qū)別在于前者是基于數(shù)組來實(shí)現(xiàn)的,后者是基于鏈表來實(shí)現(xiàn)(里面有個(gè)內(nèi)部元素類
Entry)導(dǎo)致前面的隨即訪問較后者要快,但是插入、移除操作不及后面的快,另后者操作方法也更靈活,
包括前者沒有的add,get,remove-([First][Last]),這些方法可以作為堆棧,隊(duì)列,雙向隊(duì)列使用。
Vector,可以實(shí)現(xiàn)可增長的對象數(shù)組。與數(shù)組一樣,它包含可以使用整數(shù)索引進(jìn)行訪問的組件。但是,
Vector 的大小可以根據(jù)需要增大或縮小,以適應(yīng)創(chuàng)建 Vector 后進(jìn)行添加或移除項(xiàng)的操作。 并發(fā)編程不安全
這里講一下1.5版本和以前的版本不同的地方。
往一個(gè)ArrayList中加入一個(gè)整數(shù),1.5版本以前的版本寫法是:
List list = new ArrayList();
list.add( new Integer( 10 ) );
而在1.5版本中可以寫為:
list.add( 10 );
因?yàn)椋?.5版本中,對一個(gè)整數(shù)進(jìn)行包裝,使之成為一個(gè)Integer對象(即包裝,boxing),然后加入到一個(gè)
ArrayList中的做法被認(rèn)為是沒有必要的,反之,解包(unboxing)的做法也是沒有必要的,這樣的代碼只是增
加了程序的文本長度而已,所以1.5版本支持了自動(dòng)包裝和解包操作,對于bool/Boolean,byte/Byte,
double/Double,short/Short,int/Integer,long/Long,float/Float的相應(yīng)包裝/解包操作都進(jìn)行了支持,
從而使代碼變得簡單。
Set接口:(共15個(gè)函數(shù))
繼承Collection,不允許重復(fù)的項(xiàng),沒有添加任何新的方法,只是在添加的函數(shù)中依賴元素equals()方法檢
查等同性。
實(shí)現(xiàn)類:
HashSet:為快速查找而設(shè)計(jì)的Set,存入的對象必須實(shí)現(xiàn)hashCode();
TreeSet:保持次序的Set ,底層為樹結(jié)構(gòu),使用它可以從Set中提取有序的序列,
LinkedHashSet:具有HashSet的查詢速度,且內(nèi)部使用鏈表維護(hù)元素的順序。
Map接口:
首先說明的是與Collection沒有任何關(guān)系,反映的是一對映射關(guān)系的集合,該接口描述了從不重復(fù)的鍵到值
的映射。我們可以把這個(gè)接口方法分成三組操作:改變、查詢和提供可選視圖。
改變操作允許您從映射中添加和除去鍵-值對。鍵和值都可以為null。但是,您不能把Map作為一個(gè)鍵或值添
加給自身。
Object put(Object key, Object value)
Object remove(Object key)
void putAll(Map mapping)
void clear()
查詢操作允許您檢查映射內(nèi)容:
Object get(Object key)
boolean containsKey(Object key)
boolean containsValue(Object value)
int size()
boolean isEmpty()
最后一組方法允許您把鍵或值的組作為集合來處理。
public Set keySet()
public Collection values()
public Set entrySet()
因?yàn)橛成渲墟I的集合必須是唯一的,您用Set支持。因?yàn)橛成渲兄档募峡赡懿晃ㄒ唬肅ollection支持。
最后一個(gè)方法返回一個(gè)實(shí)現(xiàn)Map.Entry接口的元素Set。
實(shí)現(xiàn)類:
TreeMap:基于紅黑樹的實(shí)現(xiàn),查看鍵或鍵值對時(shí),他們能會被排序,TreeMap是唯一一個(gè)帶subMap()的Map,
它可以返回一個(gè)子樹。
HashMap:是Map基于散列表的實(shí)現(xiàn),插入和查詢“鍵值對”的開銷是固定的,可以通過構(gòu)造起設(shè)置容量和負(fù)載
因子(load factor),以調(diào)整容器性能。
LinkedHashMap:Map 接口的哈希表和鏈接列表實(shí)現(xiàn),具有可預(yù)知的迭代順序。此實(shí)現(xiàn)與 HashMap 的不同
之處在于,后者維護(hù)著一個(gè)運(yùn)行于所有條目的雙重鏈接列表。此鏈接列表定義了迭代順序,該迭
代順序通常就是將鍵插入到映射中的順序(插入順序)。注意,如果在映射中重新插入鍵,則插
入順序不受影響。(如果在調(diào)用 m.put(k, v) 前 m.containsKey(k) 返回了 true,則調(diào)用時(shí)會
將鍵 k 重新插入到映射 m 中。)
這里要解釋一下loadfactor,默認(rèn)為0.75,負(fù)載因子是哈希表在其容量自動(dòng)增加之前可以達(dá)到多滿的一種
尺度。當(dāng)哈希表中的條目數(shù)超出了加載因子與當(dāng)前容量的乘積時(shí),則要對該哈希表進(jìn)行rehash操作
(即重建內(nèi)部數(shù)據(jù)結(jié)構(gòu)),從而哈希表將具有大約兩倍的桶數(shù)。
通常,默認(rèn)加載因子 (.75)在時(shí)間和空間成本上尋求一種折衷。加載因子過高雖然減少了空間開銷,
但同時(shí)也增加了查詢成本(在大多數(shù) HashMap 類的操作中,包括 get和put操作,都反映了這一點(diǎn))。
在設(shè)置初始容量時(shí)應(yīng)該考慮到映射中所需的條目數(shù)及其加載因子,以便最大限度地減少 rehash
操作次數(shù)。如果初始容量大于最大條目數(shù)除以加載因子,則不會發(fā)生 rehash 操作。
總結(jié)java.util包里的東東包括一些集合框架方面的,日歷,時(shí)間方面,及正則表達(dá)式,模式匹配等方面的類