集合框架:
Collection:List列表,Set集
Map:Hashtable根竿,HashMap族壳,TreeMap
Collection是單列集合
List元素是有序的、可重復(fù)
有序的collection尺上,可以對列表中每個元素的插入位置進行精確地控制。
可以根據(jù)元素的整數(shù)索引(在列表中的位置)訪問元素圆到,并搜索列表中的元素怎抛。
可存放重復(fù)元素,元素存取是有序的芽淡。
List接口中常用類
lVector:線程安全马绝,但速度慢,已被ArrayList替代吐绵。
底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組結(jié)構(gòu)
lArrayList:線程不安全迹淌,查詢速度快。
底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組結(jié)構(gòu)
lLinkedList:線程不安全己单。增刪速度快唉窃。
底層數(shù)據(jù)結(jié)構(gòu)是列表結(jié)構(gòu)
Set(集)元素?zé)o序的、不可重復(fù)纹笼。
取出元素的方法只有迭代器纹份。不可以存放重復(fù)元素,元素存取是無序的廷痘。
Set接口中常用的類
lHashSet:線程不安全蔓涧,存取速度快。
它是如何保證元素唯一性的呢笋额?依賴的是元素的hashCode方法和euqals方法元暴。
lTreeSet:線程不安全,可以對Set集合中的元素進行排序兄猩。
它的排序是如何進行的呢茉盏?通過compareTo或者compare方法中的來保證元素的唯一性。元素是以二叉樹的形式存放的枢冤。
Map是一個雙列集合
|--Hashtable:線程安全鸠姨,速度快。底層是哈希表數(shù)據(jù)結(jié)構(gòu)淹真。是同步的讶迁。
不允許null作為鍵,null作為值核蘸。
|--Properties:用于配置文件的定義和操作巍糯,使用頻率非常高啸驯,同時鍵和值都是字符串。
是集合中可以和IO技術(shù)相結(jié)合的對象鳞贷。(到了IO在學(xué)習(xí)它的特有和io相關(guān)的功能坯汤。)
|--HashMap:線程不安全,速度慢搀愧。底層也是哈希表數(shù)據(jù)結(jié)構(gòu)。是不同步的疆偿。
允許null作為鍵咱筛,null作為值。替代了Hashtable.
|--LinkedHashMap:可以保證HashMap集合有序杆故。存入的順序和取出的順序一致迅箩。
|--TreeMap:可以用來對Map集合中的鍵進行排序.
Collection和Collections的區(qū)別
Collection是集合類的上級接口,子接口主要有Set和List处铛、Map饲趋。
Collections是針對集合類的一個幫助類,提供了操作集合的工具方法:一系列靜態(tài)方法實現(xiàn)對各種集合的搜索撤蟆、排序奕塑、線程安全化等操作。
Java.util包中包含了一些在Java2中新增加的最令人興奮的增強功能:類集家肯。一個類集(collection)是一組對象龄砰。類集的增加使得許多java.util中的成員在結(jié)構(gòu)和體系結(jié)構(gòu)上發(fā)生根本的改變。它也擴展了包可以被應(yīng)用的任務(wù)范圍讨衣。Java的類集(Collection)框架使你的程序處理對象組的方法標(biāo)準(zhǔn)化换棚。在Java 2出現(xiàn)之前,Java提供了一些專門的類如Dictionary反镇,Vector固蚤,Stack和Properties去存儲和操作對象組。盡管這些類非常有用歹茶,它們卻缺少一個集中夕玩,統(tǒng)一的主題。因此例如說使用Vector的方法就會與使用Properties的方法不同辆亏。以前的專門的方法也沒有被設(shè)計成易于擴展和能適應(yīng)新的環(huán)境的形式风秤。而類集解決了這些(以及其他的一些)問題
Java類集框架的優(yōu)勢:
1) 這種框架是高性能的。對基本類集(動態(tài)數(shù)組扮叨,鏈接表缤弦,樹和散列表)的實現(xiàn)是高效率的。一般很少需要人工去對這些“數(shù)據(jù)引擎”編寫代碼(如果有的話)彻磁。
2) 框架允許不同類型的類集以相同的方式和高度互操作方式工作碍沐。
3) 類集是容易擴展和/或修改的狸捅。為了實現(xiàn)這一目標(biāo),類集框架被設(shè)計成包含一組標(biāo)準(zhǔn)的接口累提。對這些接口尘喝,提供了幾個標(biāo)準(zhǔn)的實現(xiàn)工具(例如LinkedList,HashSet和TreeSet)斋陪,通常就是這樣使用的朽褪。如果你愿意的話,也可以實現(xiàn)你自己的類集无虚。為了方便起見缔赠,創(chuàng)建用于各種特殊目的的實現(xiàn)工具。一部分工具可以使你自己的類集實現(xiàn)更加容易友题。
4) 增加了允許將標(biāo)準(zhǔn)數(shù)組融合到類集框架中的機制嗤堰。
類集的整體框架如下:
Collection接口是構(gòu)造類集框架的基礎(chǔ)。它聲明所有類集都將擁有的核心方法度宦。因為所有類集實現(xiàn)Collection踢匣,所以熟悉它的方法對于清楚地理解框架是必要的。
boolean add(Ee):向集合中增加元素戈抄,如果該類型集合允許有重復(fù)元素(如:ArrayList离唬、LinkedList等)或者不允許有重復(fù)元素但新添加的元素不在集合中則返回true,如果該類型集合不允許有重復(fù)元素并且新添加的元素已經(jīng)在集合中則返回false呛凶。
boolean addAll(CollectionE> c):將一個類集c中的所有元素添加到另一個類集(本類集)男娄。
void clear():清除本類集中所有元素,調(diào)用完該方法后本類集將為空漾稀。
boolean contains(Object o):如果本類集包含元素e模闲,并且滿足(o==null ?e==null : o.equals(e))則返回true,否則返回false崭捍。
boolean containsAll(Collection c):如果本類集包含指定類集c中的所有元素則返回true尸折,否則返回false。
boolean equals(Objecto):如果本類集的equals方法是我們自己重寫的殷蛇,則具體兩個類集怎樣才算equal(是引用相等還是值相等且順序相同)实夹,我們自己決定。如果類集的equals方法不是我們重寫的粒梦,則當(dāng)兩個類集類型為List(包括ArrayList和LinkedList亮航,元素可以重復(fù))時,必須兩個類集的元素個數(shù)相等匀们,元素順序相同缴淋,且相同位置的元素對應(yīng)相等才返回true,否則返回false;當(dāng)兩個類集類型為Set(包括HashSet和TreeSet重抖,元素不能重復(fù))時露氮,只須兩個類集的元素個數(shù)相等,并且一個類集中的任一個元素在另一個類集中都能找到相同的元素(不必順序相同钟沛,因為Set是無序的)畔规,則返回true,否則返回false恨统。
int hashCode():返回本類集的hash code值叁扫,具體算法依賴于類集中元素的值和類型,在后面的討論中會講到畜埋。
boolean isEmpty():若本類集沒有元素則返回true陌兑,否則返回false。
Iterator iterator():返回本類集中所有元素的迭代函數(shù)由捎,至于從該函數(shù)中取出的元素的順序依賴于本類集的類型,若為List則按List的順序取出饿凛,若為Set則無序狞玛。
booleanremove(Objecto):若本類集中有值與o的值相等的元素,則刪除該元素涧窒,并返回true心肪,若沒有則返回false。當(dāng)類集類型為List時纠吴,有可能有多個元素與o的值相等硬鞍,此時,只會刪除第一個值為o的元素戴已,其他元素位置不變固该。
boolean removeAll(Collectionc):刪除本類集中與指定類集c中的元素相等的所有元素,不管有多少個元素糖儡,只要在c中出現(xiàn)了伐坏,調(diào)用后d中就不會出現(xiàn)。若調(diào)用后本類集的元素有改變(即有元素被刪除)握联,則返回true桦沉,否則返回false。
boolean retainAll(Collectionc):保持本類集中在指定類集中出現(xiàn)過的所有元素金闽,即刪除本類集中不包含在指定類集c中的所有元素纯露。若調(diào)用后本類集的元素有改變(即有元素被刪除),則返回true代芜,否則返回false埠褪。
int size():返回本類集中元素的個數(shù),但大小不能超過0x7fffffff,若超過則返回0x7fffffff组橄。
Object[] toArray():返回一個包含了本類集中所有元素的數(shù)組荞膘,數(shù)組類型為:Object[],因為底層是通過iterator()方法來傳值的玉工,所以數(shù)組中元素的順序同樣依賴于本類集的類型羽资,若為List則按List的順序放入數(shù)組,若為Set則無序遵班。
T[] toArray(T[] a):以泛型的形式來傳遞返回數(shù)組的類型屠升,其他與Object[]toArray()方法類似。
直接繼承Collection接口的有List狭郑、Queue腹暖、BeanContext和Set四個接口,其中我們用的最多的是List和Set這兩個接口翰萨,后面的博文將會詳細(xì)分析脏答;另外兩個接口用的相對較少,一般要實現(xiàn)這兩個接口的功能時都是開發(fā)者自己重新實現(xiàn)亩鬼,在此不作詳細(xì)分析殖告。
轉(zhuǎn)自?