Java集合框架使用總結

    前言:
    本文是對Java集合框架做了一個概括性的解說,目的是對Java集合框架體系有個總體認識,如果你想學習具體的接口和類的使用方法,請參看Java API文檔。

    一、概述
   
    數據結構對程序設計有着深遠的影響,在面向過程的C語言中,數據庫結構用struct來描述,而在面向對象的編程中,數據結構是用類來描述的,並且包含有對該數據結構操作的方法。
    在Java語言中,Java語言的設計者對常用的數據結構和算法做了一些規範(接口)和實現(具體實現接口的類)。所有抽象出來的數據結構和操作(算法)統稱爲Java集合框架(Java Collection Framework)。
    Java程序員在具體應用時,不必考慮數據結構和算法實現細節,只需要用這些類創建出來一些對象,然後直接應用就可以了。這樣就大大提高了編程效率。

    二、集合框架的層次結構
   
    Collection是集合接口
    |————Set子接口:無序,不允許重複。
    |————List子接口:有序,可以有重複元素。

    區別:Collections是集合類

    Set和List對比:
    Set:檢索元素效率低下,刪除和插入效率高,插入和刪除不會引起元素位置改變。
    List:和數組類似,List可以動態增長,查找元素效率高,插入刪除元素效率低,因爲會引起其他元素位置改變。

    Set和List具體子類:
    Set
     |————HashSet:以哈希表的形式存放元素,插入刪除速度很快。

    List
     |————ArrayList:動態數組
     |————LinkedList:鏈表、隊列、堆棧。

    Array和java.util.Vector
    Vector是一種老的動態數組,是線程同步的,效率很低,一般不贊成使用。

    三、Iterator迭代器(接口)
   
    Iterator是獲取集合中元素的過程,實際上幫助獲取集合中的元素。
    迭代器代替了 Java Collections Framework 中的 Enumeration。迭代器與枚舉有兩點不同:
    迭代器允許調用方利用定義良好的語義在迭代期間從迭代器所指向的集合移除元素。
    方法名稱得到了改進。

    Iterator僅有一個子接口ListIterator,是列表迭代器,允許程序員按任一方向遍歷列表、迭代期間修改列表,並獲得迭代器在列表中的當前 位置。ListIterator 沒有當前元素;它的光標位置 始終位於調用 previous() 所返回的元素和調用 next() 所返回的元素之間。在長度爲 n 的列表中,有 n+1 個有效的索引值,從 0 到 n(包含)。

    四、集合框架之外的Map接口
   
    Map將鍵映射到值的對象。一個映射不能包含重複的鍵;每個鍵最多隻能映射一個值。
    Map接口是Dictionary(字典)抽象類的替代品。
    Map 接口提供三種collection 視圖,允許以鍵集、值集合或鍵-值映射關係集的形式查看某個映射的內容。映射的順序 定義爲迭代器在映射的 collection 視圖中返回其元素的順序。某些映射實現可明確保證其順序,如 TreeMap 類;某些映射實現則不保證順序,如 HashMap 類。

    有兩個常見的已實現的子類:
    HashMap:基於哈希表的 Map 接口的實現。此實現提供所有可選的映射操作,並允許使用 null 值和 null 鍵。(除了不同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同。)此類不保證映射的順序,特別是它不保證該順序恆久不變。

    TreeMap:它實現SortedMap 接口的基於紅黑樹的實現。此類保證了映射按照升序順序排列關鍵字,根據使用的構造方法不同,可能會按照鍵的類的自然順序 進行排序(參見 Comparable),或者按照創建時所提供的比較器進行排序。

    Hashtable:此類實現一個哈希表,該哈希表將鍵映射到相應的值。任何非 null 對象都可以用作鍵或值。

    五、線程安全
   
    在集合框架中,有些類是線程安全的,這些都是JDK1.1中的出現的。在JDK1.2之後,就出現許許多多非線程安全的類。
    下面是這些線程安全的同步的類:
    Vector:就比ArrayList多了個同步化機制(線程安全)。
    Statck:堆棧類,先進後出。
    Hashtable:就比HashMap多了個線程安全。
    Enumeration:枚舉,相當於迭代器。
    除了這些之外,其他的都是非線程安全的類和接口。
    線程安全的類其方法是同步的,每次只能一個訪問。是重量級對象,效率較低。對於非線程安全的類和接口,在多線程中需要程序員自己處理線程安全問題。

    六、其他一些接口和類介紹
   
    Dictionary和Hashtable類:
    Dictionary提供鍵值映射的功能,是個抽象類。一般使用它的子類HashTable類。遍歷Hashtable類要用到枚舉。

    Properties類
    Properties 繼承於 Hashtable,Properties 類表示了一個持久的屬性集。Properties 可保存在流中或從流中加載。屬性列表中每個鍵及其對應值都是一個字符串。一般可以通過讀取properties配置文件來填充Properties對象。
發佈了44 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章