集合類操做優化經驗總結(一)

本文首先針對 Java 集合接口進行了一些介紹,並對這些接口的實現類進行詳細描述,包括 LinkedList、ArrayList、Vector、Stack、Hashtable、HashMap、WeakHashMap 等,而後對一些實現類的實現方式和使用經驗進行講解,同時重點介紹 WeakHashMap。但願經過本文介紹,可讓讀者對集合的操做方式、注意事項等有一些瞭解。java

在實際的項目開發中會有不少的對象,如何高效、方便地管理對象,成爲影響程序性能與可維護性的重要環節。Java 提供了集合框架來解決此類問題,線性表、鏈表、哈希表等是經常使用的數據結構,在進行 Java 開發時,JDK 已經爲咱們提供了一系列相應的類來實現基本的數據結構,全部類都在 java.util 這個包裏,清單 1 描述了集合類的關係。數組

清單 1.集合類之間關係
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap

本文講的就是集合框架的使用經驗總結,注意,本文全部代碼基於 JDK7。數據結構

集合接口

Collection 接口框架

Collection 是最基本的集合接口,一個 Collection 表明一組 Object,即 Collection 的元素(Elements)。一些 Collection 容許相同的元素、支持對元素進行排序,另外一些則不行。JDK 不提供直接繼承自 Collection 的類,JDK 提供的類都是繼承自 Collection 的子接口,如 List 和 Set。全部實現 Collection 接口的類都必須提供兩個標準的構造函數,無參數的構造函數用於建立一個空的 Collection,有一個 Collection 參數的構造函數用於建立一個新的 Collection,這個新的 Collection 與傳入的 Collection 有相同的元素,後一個構造函數容許用戶複製一個 Collection。dom

如何遍歷 Collection 中的每個元素?函數

不論 Collection 的實際類型如何,它都支持一個 iterator() 的方法,該方法返回一個迭代子,使用該迭代子便可逐一訪問 Collection 中每個元素。典型的用法以下:性能

Iterator it = collection.iterator(); // 得到一個迭代子
while(it.hasNext()){
Object obj = it.next(); // 獲得下一個元素
}

Collection 接口派生的兩個接口是 List 和 Set。spa

Collection 接口提供的主要方法:code

  1. boolean add(Object o) 添加對象到集合;對象

  2. boolean remove(Object o) 刪除指定的對象;

  3. int size() 返回當前集合中元素的數量;

  4. boolean contains(Object o) 查找集合中是否有指定的對象;

  5. boolean isEmpty() 判斷集合是否爲空;

  6. Iterator iterator() 返回一個迭代器;

  7. boolean containsAll(Collection c) 查找集合中是否有集合 C 中的元素;

  8. boolean addAll(Collection c) 將集合 C 中全部的元素添加給該集合;

  9. void clear() 刪除集合中全部元素;

  10. void removeAll(Collection c) 從集合中刪除 C 集合中也有的元素;

  11. void retainAll(Collection c) 從集合中刪除集合 C 中不包含的元素。

List 接口

List 是有序的 Collection,使用此接口可以精確的控制每一個元素插入的位置。用戶可以使用索引(元素在 List 中的位置,相似於數組下標)來訪問 List 中的元素,這相似於 Java 的數組。和下文要提到的 Set 不一樣,List 容許有相同的元素。

除 了具備 Collection 接口必備的 iterator() 方法外,List 還提供一個 listIterator() 方法,返回一個 ListIterator 接口。和標準的 Iterator 接口相比,ListIterator 多了一些 add() 之類的方法,容許添加、刪除、設定元素、向前或向後遍歷等功能。實現 List 接口的經常使用類有 LinkedList,ArrayList,Vector 和 Stack 等。

List 接口提供的主要方法:

  1. void add(int index,Object element) 在指定位置上添加一個對象;

  2. boolean addAll(int index,Collection c) 將集合 C 的元素添加到指定的位置;

  3. Object get(int index) 返回 List 中指定位置的元素;

  4. int indexOf(Object o) 返回第一個出現元素 O 的位置;

  5. Object removeint(int index) 刪除指定位置的元素;

  6. Object set(int index,Object element) 用元素 element 取代位置 index 上的元素, 返回被取代的元素。

Map 接口

Map 沒有繼承 Collection 接口。Map 提供 Key 到 Value 的映射,一個 Map 中不能包含相同的 Key,每一個 Key 只能映射一個 Value。Map 接口提供 3 種集合的視圖,Map 的內容能夠被看成一組 Key 集合,一組 Value 集合,或者一組 Key-Value 映射。

Map 提供的主要方法:

  1. boolean equals(Object o) 比較對象;

  2. boolean remove(Object o) 刪除一個對象;

  3. put(Object key,Object value) 添加 key 和 value。

RandomAccess 接口

RandomAccess 接口是一個標誌接口,自己並無提供任何方法,任務凡是經過調用 RandomAccess 接口的對象均可以認爲是支持快速隨機訪問的對象。此接口的主要目的是標識那些可支持快速隨機訪問的 List 實現。任何一個基於數組的 List 實現都實現了 RaodomAccess 接口,而基於鏈表的實現則都沒有。由於只有數組可以進行快速的隨機訪問,而對鏈表的隨機訪問須要進行鏈表的遍歷。所以,此接口的好處是,能夠在應用程序中 知道正在處理的 List 對象是否能夠進行快速隨機訪問,從而針對不一樣的 List 進行不一樣的操做,以提升程序的性能。

相關文章
相關標籤/搜索