
??java中的容器使用是java程序員在編程開發(fā)中必不可少的技能,就算是剛?cè)腴T的java程序員,也一定會用到ArrayList,Hashmap這樣的容器。在《java編程思想》提供了一張JDK中容器的知識圖譜,而自JDK1.5后也增加了不少新的容器 類?;艘稽c時間,把JDK中的容器類以導(dǎo)圖的形式描述出來,做為一個以后工作的備查記錄。
??JDK中 的容器種類繁多,但常用的可能也就不到十種,讓我們做一個簡單的脈絡(luò)梳理。
??JDK中的容器源自兩個接口: Map和Collection。這兩個接口描述了自然世界中兩種典型的集合類型:Collection是普通對象的集合,而Map則 是名值對(特殊對象)的集合。由Collection接口衍生出了List和Set兩個接口,這里我們可以簡單地認(rèn)為List是可以有重復(fù)元素的集合,而Set符合代理中的集合概念,是一個沒有重復(fù)元素的集合(JAVA中判斷兩個對象是否相同,可根據(jù)重寫的equals函數(shù))。
??由List接口,可衍生出列表,堆棧,隊列三類容器對象。列表對象中常用的是ArrayList和LinkedList,在實現(xiàn)形式上應(yīng)對 一維向量與雙向鏈表,由于 LinkedList是雙向鏈表,因而也可以作為隊列使用,遍歷可使用listIterator從反向遍歷。堆??梢暈橐粋€LIFO的隊列,典型的實現(xiàn)類是Stack。隊列概念上是一個FIFO的隊列,在接口中有單向Queue和雙向Deque兩類接口,大家可以關(guān)注一下PriorityQueue(實現(xiàn)上為一個完全搜索二叉樹)和DelayQueue這兩類比較特殊的隊列,在并發(fā)編程中常會用到。在隊列的實現(xiàn)類中還有一類名字中帶“Blocking”的隊列實現(xiàn)類,這類容器可在條件滿足時阻塞線程。
??由Set接口,衍生出的實現(xiàn)類中常用的為HashSet和TreeSet,需要注意的是TreeSet是一個有序集合。
??由Map接口,衍生出的實現(xiàn)類有HashMap和HashTable。
??對于JDK中的容器,使用迭代器Iterator進行元素的遍歷是最常用的方法,而在使用時,設(shè)置一個初始容量(針對提供該特征的某些容器)也非常有必要。在JDK1.5之后,java.util.concurrent 包中增加了一些線程安全的容器類(如ConcurrentHashMap),可實現(xiàn)基礎(chǔ)操作的原子性。