Java 集合类图(转)
1.java集合類(lèi)圖
1.1
1.2
上述類(lèi)圖中,實(shí)線邊框的是實(shí)現(xiàn)類(lèi),比如ArrayList,LinkedList,HashMap等,折線邊框的是抽象類(lèi),比如AbstractCollection,AbstractList,AbstractMap等,而點(diǎn)線邊框的是接口,比如Collection,Iterator,List等。
發(fā)現(xiàn)一個(gè)特點(diǎn),上述所有的集合類(lèi),都實(shí)現(xiàn)了Iterator接口,這是一個(gè)用于遍歷集合中元素的接口,主要包含hashNext(),next(),remove()三種方法。它的一個(gè)子接口LinkedIterator在它的基礎(chǔ)上又添加了三種方法,分別是add(),previous(),hasPrevious()。也就是說(shuō)如果是先Iterator接口,那么在遍歷集合中元素的時(shí)候,只能往后遍歷,被遍歷后的元素不會(huì)在遍歷到,通常無(wú)序集合實(shí)現(xiàn)的都是這個(gè)接口,比如HashSet,HashMap;而那些元素有序的集合,實(shí)現(xiàn)的一般都是LinkedIterator接口,實(shí)現(xiàn)這個(gè)接口的集合可以雙向遍歷,既可以通過(guò)next()訪問(wèn)下一個(gè)元素,又可以通過(guò)previous()訪問(wèn)前一個(gè)元素,比如ArrayList。
還有一個(gè)特點(diǎn)就是抽象類(lèi)的使用。如果要自己實(shí)現(xiàn)一個(gè)集合類(lèi),去實(shí)現(xiàn)那些抽象的接口會(huì)非常麻煩,工作量很大。這個(gè)時(shí)候就可以使用抽象類(lèi),這些抽象類(lèi)中給我們提供了許多現(xiàn)成的實(shí)現(xiàn),我們只需要根據(jù)自己的需求重寫(xiě)一些方法或者添加一些方法就可以實(shí)現(xiàn)自己需要的集合類(lèi),工作流昂大大降低。
1.3
Java的集合類(lèi)主要由兩個(gè)接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,這兩個(gè)接口又包含了一些接口或?qū)崿F(xiàn)類(lèi)。
Set和List接口是Collection接口派生的兩個(gè)子接口,Queue是Java提供的隊(duì)列實(shí)現(xiàn),類(lèi)似于List。
Map實(shí)現(xiàn)類(lèi)用于保存具有映射關(guān)系的數(shù)據(jù)(key-value)。
Set、List和Map可以看做集合的三大類(lèi)。
List集合是有序集合,集合中的元素可以重復(fù),訪問(wèn)集合中的元素可以根據(jù)元素的索引來(lái)訪問(wèn)。
Set集合是無(wú)序集合,集合中的元素不可以重復(fù),訪問(wèn)集合中的元素只能根據(jù)元素本身來(lái)訪問(wèn)(也是不能集合里元素不允許重復(fù)的原因)。
Map集合中保存Key-value對(duì)形式的元素,訪問(wèn)時(shí)只能根據(jù)每項(xiàng)元素的key來(lái)訪問(wèn)其value。
Vector:
用ArrayList代替Vector。Vector是線程安全的,而有的時(shí)候我們確實(shí)希望在多線程的情況下使用列表,那么這個(gè)時(shí)候我們可以利用Collections這個(gè)類(lèi)當(dāng)中為我們提供的synchronizedList(List list),它可以返回一個(gè)線程安全的同步的列表,還提供了返回同步的Collections。
Hashtable:
用HashMap代替Hashtable。Hashtable是線程安全的,而有的時(shí)候我們確實(shí)希望在多線程的情況下使用HashMap,那么這個(gè)時(shí)候我們可以利用Collections這個(gè)類(lèi)當(dāng)中為我們提供的synchronizedMap(Map<K,V> m),它可以返回一個(gè)線程安全的同步的HashMap
Stack:
用LinkedList代替Stack。當(dāng)初在設(shè)計(jì)Stack的時(shí)候就有一些潛在的問(wèn)題,它是從Vector繼承而來(lái),對(duì)于一個(gè)棧來(lái)說(shuō),它只能是最后放進(jìn)去的元素,要先出來(lái),但是它繼承自Vector,而Vector中有一個(gè)方法叫做elementAt(int index),而不能說(shuō)是通過(guò)這個(gè)索引index去任意的獲得一個(gè)元素。結(jié)果它就有了這個(gè)奇怪的特性,提倡應(yīng)該自己利用LinkedList去實(shí)現(xiàn)一個(gè)stack。
對(duì)于Set、List和Map三種集合,最常用的實(shí)現(xiàn)類(lèi)分別是HashSet、ArrayList和HashMap三個(gè)實(shí)現(xiàn)類(lèi)。(并發(fā)控制的集合類(lèi),以后有空研究下)。
努力奮斗的小墨魚(yú) ---- http://www.cnblogs.com/WayneZeng/
總結(jié)
以上是生活随笔為你收集整理的Java 集合类图(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数据结构与算法(一)——排序
- 下一篇: PHP(四)——性能优化