Java類集框架


                     

 

  本文主要講述Java類集框架。更多Java技術知識,請登陸瘋狂軟件教育官網。加微信號瘋狂軟件,或者用微信搜索瘋狂軟件,參加2015年優惠活動,有機會獲得優惠劵和代金劵。

  一、系統簡述:

  1.集合框架總體結構

  Java中集合類定義主要是java.util.*包下面,常用的集合在系統中定義了三大接口,這三類的區別是:

  java.util.Set接口及其子類,set提供的是一個無序的集合;

  java.util.List接口及其子類,List提供的是一個有序的集合;

  java.util.Map接口及其子類,Map提供了一個映射(對應)關係的集合數據結構;

  另外,在JDK5中新增了Queue(隊列)接口及其子類,提供了基於隊列的集合體系。每種集合,都可以理解爲用來在內存中存放一組對象的某種”容器“---就像數組,就像前面我們自己定義的隊列。

  一、系統簡述:

  1.集合框架總體結構

  Java中集合類定義主要是java.util.*包下面,常用的集合在系統中定義了三大接口,這三類的區別是:

  java.util.Set接口及其子類,set提供的是一個無序的集合;

  java.util.List接口及其子類,List提供的是一個有序的集合;

  java.util.Map接口及其子類,Map提供了一個映射(對應)關係的集合數據結構;

  另外,在JDK5中新增了Queue(隊列)接口及其子類,提供了基於隊列的集合體系。每種集合,都可以理解爲用來在內存中存放一組對象的某種”容器“---就像數組,就像前面我們自己定義的隊列。

  2.Set接口和List接口

  Set 是最簡單的一種集合,它的對象不按特定方式排序,只是簡單的把對象加入集合中,就像往口袋裏放東西。對集中成員的訪問和操作是通過集中對象的引用進行的,所以集中不能有重複對象;而LIst的主要特徵是其對象以線性方式存儲,沒有特定順序,只有一個開頭和一個結尾,當然,它與根本沒有順序的集是不同的。列表在數據結構中分別表現爲:數組和向量、鏈表、堆棧、隊列。關於實現列表的集合類,是我們日常工作中經常用到的;從類圖中可以看到,Set 和List都是繼承了Collection接口的子接口,而這類集合都有自己的實現;

  3.java.util.Map接口

  現實生活中,我們常會看到這樣的一種集合:IP地址與主機名,***號與個人,系統用戶用與系統用戶對等,這種一一對應的關係,就叫做映射。Java提供了專門的集合類用來存放這種對象關係的對象,即java.util.Map接口。Map是一個接口,有多種具體的實現類,常用的有HashMap和 Hashtable類實現。Map中存入的對象是一對一對的,即每個對象和它的一個名字(鍵)關聯在一起

  Map中存放的是兩種對象,一種稱爲key(鍵),一種稱爲value(值),它們在在Map中是一一對應關係,這一對對象又稱做Map中的一個Entry(項);Map中的鍵不能重複,但值可以重複。

  二、詳細闡述:

  一、概述

  數據結構對程序設計有着深遠的影響,在面向過程的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:枚舉,相當於迭代器。

  除了這些之外,其他的都是非線程安全的類和接口。

  線程安全的類其方法是同步的,每次只能一個訪問。是重量級對象,效率較低。對於非線程安全的類和接口,在多線程中需要程序員自己處理線程安全問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章