java的集合应用_Java之集合类应用总结
1.集合類(lèi)類(lèi)圖
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
├HashSet
├TreeSet
├LinkedHashSet
Map
├Hashtable
├HashMap
├WeakHashMap
└SortedMap
└TreeMap
2.分類(lèi)介紹
Collection是最基本的集合接口,JDK提供的類(lèi)都繼承自Collection的“子接口”,如List和Set。所有實(shí)現(xiàn)Collection接口的類(lèi)都必須提供兩個(gè)標(biāo)準(zhǔn)的構(gòu)造函數(shù):無(wú)參數(shù)的構(gòu)造函數(shù)和有一個(gè)Collection參數(shù)的構(gòu)造函數(shù)。前者用于創(chuàng)建一個(gè)空的Collection,后者用于創(chuàng)建一個(gè)新的Collection,允許用戶(hù)復(fù)制一個(gè)Collection。不論Collection的實(shí)際類(lèi)型如何,它都支持一個(gè)iterator()的方法,該方法返回一個(gè)迭代子,可逐一訪(fǎng)問(wèn)Collection中每一個(gè)元素。用法如下:
Iterator it = collection.iterator(); //獲得一個(gè)迭代子 while(it.hasNext()) {
Object obj = it.next(); //得到下一個(gè)元素 }
由Collection接口派生的兩個(gè)接口是List和Set。
1)Collection和Map區(qū)別:
Collection類(lèi)型,每個(gè)位置只有一個(gè)元素。
Map類(lèi)型,持有key-value形式的數(shù)據(jù)——“鍵值對(duì)”,即其元素是成對(duì)的對(duì)象。
2)Collection子接口List和Set區(qū)別:
List是有序的Collection,確保維護(hù)元素特定的順序,這類(lèi)似于Java的數(shù)組。
Set接口不保證維護(hù)元素的次序,存入Set的每個(gè)元素必須是唯一的。加入Set的Object必須定義equals()方法以確保對(duì)象的唯一性。
3)List實(shí)現(xiàn)類(lèi)ArrayList、LinkedList和Vector區(qū)別
ArrayList實(shí)現(xiàn)了可變大小的數(shù)組,允許對(duì)元素進(jìn)行快速隨機(jī)訪(fǎng)問(wèn),但是向List中間插入與移除元素的速度很慢(類(lèi)似動(dòng)態(tài)數(shù)組)。它允許所有元素,包括null。ArrayList沒(méi)有同步。如果數(shù)組長(zhǎng)度一定,用數(shù)組效率更高。
LinkedList插入與刪除元素開(kāi)銷(xiāo)不大,隨機(jī)訪(fǎng)問(wèn)相比則相對(duì)較慢(類(lèi)似鏈表)。可當(dāng)堆棧、隊(duì)列和雙向隊(duì)列使用。
Vector是同步的。當(dāng)一個(gè)Iterator被創(chuàng)建而且正在被使用,另一個(gè)線(xiàn)程改變了Vector的狀態(tài),這時(shí)將拋出ConcurrentModificationException異常,因此必須捕獲該異常。比ArrayList慢。
Stack繼承自Vector,實(shí)現(xiàn)一個(gè)后進(jìn)先出的堆棧。同步的。
4)Set實(shí)現(xiàn)類(lèi)HashSet和TreeSet區(qū)別
HashSet為快速查找而設(shè)計(jì)的Set(采用散列函數(shù))。存入HashSet的對(duì)象必須定義hashCode()。?它不保證集合的迭代順序;特別是它不保證該順序恒久不變。此類(lèi)允許使用 null元素。此實(shí)現(xiàn)不是同步的。
TreeSet保持次序的Set,底層為紅黑樹(shù)。使用它可以從Set中提取有序的序列。
LinkedHashSet: 具有HashSet的查詢(xún)速度,且內(nèi)部使用鏈表維護(hù)元素的順序(哈希函數(shù)+鏈表)。于是在使用迭代器遍歷Set時(shí),結(jié)果會(huì)按元素插入的次序顯示。
5)Map實(shí)現(xiàn)類(lèi)Hashtable、HashMap和WeakHashMap
Hashtable是同步的,不允許null。繼承于陳舊的Dictionary類(lèi)的。
HashMap是非同步的,速度比Hashtable快。允許null。HashMap繼承于AbstractMap類(lèi)。內(nèi)部Hash數(shù)組等于Hashtable不同。Map 中插入、刪除和定位元素,HashMap 是最好的選擇。
WeakHashMap是一種改進(jìn)的HashMap,若一個(gè)key不再被外部所引用,那么該key可以被GC回收。
TreeMap中所有元素都保持固定的順序,如果需有序的結(jié)果你就應(yīng)該使用TreeMap(HashMap中元素的排列順序是不固定的)。
3 總結(jié)
容器對(duì)象僅能持有對(duì)象引用(對(duì)象的指針),而不是將對(duì)象信息Copy一根至數(shù)列末位置。
在多線(xiàn)程環(huán)境下,對(duì)于非同步的結(jié)合和Map,可以用類(lèi)似List list = Collections.synchronizedList(new LinkedList(...));或Collections.synchronizedMap(originMap)實(shí)現(xiàn)其同步,或者其他手動(dòng)同步的方法。
Map提供的不是對(duì)象與數(shù)組的關(guān)聯(lián),而是對(duì)象和對(duì)象的關(guān)聯(lián)。
Set只接受不重復(fù)的對(duì)象。HashSet提供了最快的查詢(xún)速度。而TreeSet則保持元素有序。LinkedHashSet保持元素的插入順序。
沒(méi)必要再在新代碼里使用舊類(lèi)庫(kù)留下來(lái)的Vector,Hashtable和Stack了。
總結(jié)
以上是生活随笔為你收集整理的java的集合应用_Java之集合类应用总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql学时用什么类型_MYSQL数据
- 下一篇: java属于面相_[Java教程]面相对