List和ArrayList和Vector和HashTable和HashMap區(qū)別_第1頁
List和ArrayList和Vector和HashTable和HashMap區(qū)別_第2頁
List和ArrayList和Vector和HashTable和HashMap區(qū)別_第3頁
List和ArrayList和Vector和HashTable和HashMap區(qū)別_第4頁
List和ArrayList和Vector和HashTable和HashMap區(qū)別_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、List 和 Map 都是接口不能實例化的以前這么寫 List list = new Vector(;現(xiàn)在這么寫 List list = new ArrayList(;用 ArrayList 代替了 Vector 因為前者的性能比后者好;但是兩個都是實現(xiàn)了 List 借口的同理 Map map = new HashTable(;(以前 Map map = new HashMap(;(現(xiàn)在 -2樓 -ArrayList 和 HashMap 是異步的, Vector 和 HashTable 是同步的,所以 Vector 和 HashTable 是線程安全的,而 ArrayList 和 HashMa

2、p 并不是線程安全的。因為同 步需要花費機器時間,所以 Vector 和 HashTable 的執(zhí)行效率要低于 ArrayList 和 HashMap 。Collection List LinkedList ArrayList Vector Stack SetMap Hashtable HashMap WeakHashMapList 接口List 是有序的 Collection ,使用此接口能夠精確的控制每個元素插入的位置。 用戶能夠使用索引(元素在 List 中的位置,類似于數(shù)組下標(biāo)來訪問 List 中的 元素,這類似于java的數(shù)組。和下面要提到的 Set 不同, List 允許有相同的元

3、素。除了具有 Collection 接口必備的 iterator(方法外, List 還提供一個 listIterator(方法,返回一個 ListIterator 接口,和標(biāo)準(zhǔn)的 Iterator 接口相比, ListIterator 多了 一些 add(之類的方法,允許添加,刪除,設(shè)定元素,還能向前或向后遍歷。 實現(xiàn) List 接口的常用類有 LinkedList , ArrayList , Vector 和 Stack 。 ArrayList 類ArrayList 實現(xiàn)了可變大小的數(shù)組。它允許所有元素,包括 null 。 ArrayList 沒有同步。size , isEmpty , g

4、et , set 方法運行時間為常數(shù)。但是 add 方法開銷為分?jǐn)偟某?shù), 添加 n 個元素需要 O(n的時間。其他的方法運行時間為線性。每個 ArrayList 實例都有一個容量(Capacity ,即用于存儲元素的數(shù)組的大 小。 這個容量可隨著不斷添加新元素而自動增加, 但是增長算法并沒有定義。 當(dāng)需要插入大量元素時,在插入前可以調(diào)用 ensureCapacity 方法來增加 ArrayList 的容量以提高插入效率。和 LinkedList 一樣, ArrayList 也是非同步的(unsynchronized 。Map 接口請注意, Map 沒有繼承 Collection 接口, Ma

5、p 提供 key 到 value 的映射。一 個 Map 中不能包含相同的 key ,每個 key 只能映射一個 value 。 Map 接口提供 3種集合的視圖, Map 的內(nèi)容可以被當(dāng)作一組 key 集合,一組 value 集合,或者一 組 key-value 映射。HashMap 類HashMap 和 Hashtable 類似, 不同之處在于 HashMap 是非同步的, 并且允許 null ,即 null value 和 null key 。 ,但是將 HashMap 視為 Collection 時(values(方 法可返回 Collection ,其迭代子操作時間開銷和 HashM

6、ap 的容量成比例。因此, 如果迭代操作的性能相當(dāng)重要的話,不要將 HashMap 的初始化容量設(shè)得過高, 或者 load factor過低。-3樓 -1.List 是接口, List 特性就是有序 , 會確保以一定的順序保存元素 .ArrayList 是它的實現(xiàn)類 , 是一個用數(shù)組實現(xiàn)的 List.Map 是接口 ,Map 特性就是根據(jù)一個對象查找對象 .HashMap 是它的實現(xiàn)類 ,HashMap 用 hash 表實現(xiàn)的 Map, 就是利用對象的 hashcode(hashcode(是 Object 的方法 進(jìn)行快速散列查找 .(關(guān)于散列查找 , 可以參看 <<數(shù)據(jù)結(jié)構(gòu) &g

7、t;>2.一般情況下 , 如果沒有必要 , 推薦代碼只同 List,Map 接口打交道 .比如 :List list = new ArrayList(;這樣做的原因是 list 就相當(dāng)于是一個泛型的實現(xiàn) , 如果想改變 list 的類型 , 只需要 : List list = new LinkedList(;/LinkedList也是 List 的實現(xiàn)類 , 也是 ArrayList 的兄弟 類這樣 , 就不需要修改其它代碼 , 這就是接口編程的優(yōu)雅之處 .另外的例子就是 , 在類的方法中 , 如下聲明 :private void doMyAction(List list這樣這個方法能處

8、理所有實現(xiàn)了 List 接口的類 , 一定程度上實現(xiàn)了泛型函數(shù) . 3.如果開發(fā)的時候覺得 ArrayList,HashMap 的性能不能滿足你的需要 , 可以通過實現(xiàn) List,Map(或者 Collection 來定制你的自定義類 .可以參考 The Art Of Computer Programming的 Sorting and Searching部分下面的三個函數(shù)都是相等的 . 返回的都是 new ArrayList(public Collection getDomainsHelper(String sqlCollection list=new ArrayList(;return li

9、st;public Collection getDomainsHelper(String sqlList list=new ArrayList(;return list;public Collection getDomainsHelper(String sqlreturn new ArrayList(;Collection 是 List 和 Set 兩個接口的基接口List 在 Collection 之上增加了 " 有序 "Set 在 Collection 之上增加了 " 唯一 "而 ArrayList 是實現(xiàn) List 的類 . 所以他是有序的 .它里

10、邊存放的元素在排列上存在一定的先后順序而且 ArrayList 是采用數(shù)組存放元素另一種 List LinkedList采用的則是鏈表Vector 還是 ArrayList 哪一個更好,為什么?要回答這個問題不能一概而論,有時候使用 Vector 比較好;有時是 ArrayList , 有時候這兩個都不是最好的選擇。 你別指望能夠獲得一個簡單肯定答案, 因為這要看你用它們干什么。 下面有 4個要考慮的因素:l APIl 同步處理l 數(shù)據(jù)增長性l 使用模式下面針對這 4個方面進(jìn)行一一探討API在由 Ken Arnold等編著的java Programming Language (Addison-

11、Wesley, June 2000一書中有這樣的描述, Vector 類似于 ArrayList. 。 所有從 API 的角度來看這兩個類非常相似。 但他們之間也還是有一些主要的區(qū)別的。同步性Vector 是同步的。 這個類中的一些方法保證了 Vector 中的對象是線程安全的。 而 ArrayList 則是異步的,因此 ArrayList 中的對象并不是線程安全的。因為同步的要求會影響執(zhí)行的 效率,所以如果你不需要線程安全的集合那么使用 ArrayList 是一個很好的選擇,這樣可以避免由于 同步帶來的不必要的性能開銷。數(shù)據(jù)增長從內(nèi)部實現(xiàn)機制來講 ArrayList 和 Vector 都是使

12、用數(shù)組 (Array來控制集合中的對 象。當(dāng)你向這兩種類型中增加元素的時候, 如果元素的數(shù)目超出了內(nèi)部數(shù)組目前的長度它們都需要擴 展內(nèi)部數(shù)組的長度,Vector 缺省情況下自動增長原來一倍的數(shù)組長度, ArrayList 是原來的 50%,所以 最后你獲得的這個集合所占的空間總是比你實際需要的要大。 所以如果你要在集合中保存大量的數(shù)據(jù) 那么使用 Vector 有一些優(yōu)勢,因為你可以通過設(shè)置集合的初始化大小來避免不必要的資源開銷。 使用模式在 ArrayList 和 Vector 中,從一個指定的位置(通過索引查找數(shù)據(jù)或是在集合 的末尾增加、移除一個元素所花費的時間是一樣的,這個時間我們用 O(1表示。但是,如果在集合 的其他位置增加或移除元素那么花費的時間會呈線形增長:O(n-i,其中 n 代表集合中元素的個數(shù), i 代表元素增加或移除元素的索引位置。為什么會這樣呢?以為在進(jìn)行上述操作的時候集合中第 i 和第 i 個元素之后的所有元素都要執(zhí)行位移的操作。這一切意味著什么呢?這意味著, 你只是查找特定位置的元素或只在集合的末端增加、 移除元素, 那么 使用 Vector 或ArrayList 都可以。 如果是其他操作, 你最好選擇其他的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論