麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

Java----介紹三個集合容器庫

2019-11-18 13:12:43
字體:
來源:轉載
供稿:網友

  自java 2 Patform 誕生以來,Java Coections Framework 一直是Java核心類庫的標準組成部分。如今,會發現起了些變化,我們有了其它的選擇,譬如Jakarta Commons Coections 和 Recursion Software 公司最新的Java Generic ibrary (JG)。它們打破了Java Coections Framework 的壟斷。(November 1, 2002)
  
  在 Java 誕生之初,Java核心類庫僅支持幾種數據結構,包括數組(arrays)、向量(vectors) 和 hash tabes(鍵-值對)。而不支持另一些重要的數據結構,比如,平衡數(baanced trees)、原始對象袋(generic bags of objects)和優先隊列(PRiority queues),但是這些你都可以自己來構建。因而,有一些開發者在類庫中加入了他們自己的數據結構。
  
  在這篇文章中,我們將回顧一些開發者早期的嘗試,他們是如何發展Sun公司的Java Coections Framework的版本,以及該框架早期的進展和在參照了用戶需求之后對一些數據結構的支持。
  
  Java Coections Frameworks 的歷史
  首先,讓我們回顧一下初期的數據結構集合,服務于紐約州立大學(在美國的Oswego)的Doug ea,他大概是創立了第一個被廣泛應用的集合(coection)。該集合在1995年秋被發布。
  
  那時候,一些早期的Java的開發者是由C++轉變而來。他們用Standard Tempate ibrary (ST) 進行開發,創立了Java 核心類庫,而該類庫極其缺乏對算法和數據結構的支持。 一家來自C++和ST世界的公司(ObjectSpace)決定將ST接入Java。于是Java Generic ibrary (JG) 在1996年發布,但是Sun并不喜歡這個名字。ObjectSpace公司因此將其改名為Generic Coection ibrary for Java,但仍然使用JG這一縮寫。
  JG流行一時。通過營銷,ObjectSpace公司使10個IDE(集成開發環境)工具提供商集成了該類庫。ObjectSpace宣稱它的基本用戶已超過十萬人。(而那時候Java開發者還遠不及七位數。)事實上JG在Java早期成了一種標準。在幾次修訂之后,加了一個包并且與ObjectSpace的Voyager Object Request Broker (ORB) 集成,在1997年秋JG 3.1版發布。
  
  隨著J2SE 1.2的到來,以及它對數據結構支持的變化,Doug ea 放棄了他的 coections包,開始使用公用類的第二個類庫開發。該新包提高了對數據的同步和多線程訪問。在1998年7月發布的“uti.concurrent”類就提供了對鎖閉(ocking)、池連(pooing)和同步(concurrent)的支持。
  
  Java Coections Framework
  J2SE 1.2 是在1998年12月發布的,它包括了一組稱為Java Coections Framework 的類,用來操作數據集合。對比JG和 Coections Framework,它們有不同的目的JG是ST的替代品,而Java Coections Framework則不是。以前的C++開發者傾向于使用JG,那是因為JG需要進行深入地學習,而這對于已經熟悉ST的人更為自然。JG大約有130個類和接口,而Coections Framework約是這個的百分之二十。
  
  另外一個選擇是Jakarta Commons Coections組件,于2001年7月發布,它用特制的數據類型和新方法擴展了J2SE 1.2 的APIS測試了集合論。在增添了一些類和接口的基礎上,Coections Framework 和 J2SE 1.4版沒有什么變化。對原型(如,模板),JSR14組織曾經辯論過,不過沒有加入到J2SE 1.4。JSR 14 發布了一個原型,但僅在開發團體內部受到支持。
  JSR 166 組織于去年1月出爐,由Doug ea 領導。該組織極力將先前提及uti.concurrent 類庫中的諸多高水平概念并入到Java 核心類庫中。
  itte 從ObjectSpace公司的親屬那得知,在J2SE 1.4版發布前一天一個叫Recursion Software 的公司宣稱取得了JG版權。后來,在2002年7月,Recursion Software 公司發布了JG 4.0版,并將JG集合和算法與標準的Coections Framework集成。
  到了今天,我們可用的類庫有:
  Coections Framework,它是Java 核心類庫的一部分,且定義了對所有數據結構實現的接口。
  Jakarta Commons Coections組件,可以在Apache軟件協議下自由取得。
  JG 4.0
  對Generic-types支持,作為原型對JSR 14 可用
  兩個非標準的類庫(來自Doug ea),由JSR 166 正在發展成標準。
  
  讓我們來看看這些類庫,考慮一下何時可能會使用它們。
  The Coections Framework
  Coection Framework 它提供了一套核心接口,共六個:Coection, Set, ist, SortedSet, Map, 和 SortedMap.
  Coection 是sets和ists的基本接口。它描述了一組沒有非凡特征的元素。對Coection沒有直接的實現,僅有子接口的實現。
  Set是一個由一些項組成的集合,這些項不容許出現重復。HashSet 和 TreeSet 是兩個Set 的標準實現;TreeSet 是經過分類的,它實現了SortedSet。
  ist接口是一個經排序的集合,提供了索引或順序存取。ist的實現包括Arrayist和inkedist;Arrayist替代了原來的Vector類。
  Map描述了‘鍵-值’格式的集合,類似于Hashtabe。可用的maps映射有HashMap和TreeMap;TreeMap是經過分類的,它實現了SortedMap。J2SE 1.4 引入兩個新的實現:inkedHashSet和inkedHashMap,它們內部自動維護了在增添、搜索和刪除操作后的元素順序。J2SE 1.4 中另一個實現是IdentityHashMap,它用“==”代替了“equas()”來進行等比較。對于在weak reference 感愛好的人來說,還有一個映射——WeakHashMap,它可以把WeakReference用作鍵(keys),因而,假如是通過鍵作為值(vaue)的唯一引用,將會丟棄該鍵-值對。
  在設計之初,基本框架是非線程安全的。多線程的同步訪問安全性需要用一個線程安全的外覆器(wrapper)來達到。這樣的一種外覆器在集合框架中有一個只讀的類似版本。
  然而,這一框架比較小,不意味著對所有數據結構提供支持。相反,你僅僅可以通過它創建一些非凡的實現。
  
  The Jakarta Commons Coections 組件
  一些特定實現已被很好地定義與解釋,可他們卻不是核心集合框架(core Coections Framework)的一部分。其中的一些實現可能被包含在了同步公用類庫里,隨后我們將更為細致的討論。
  Jakarta Commons Coections 組件是這套特定實現的一個示例。被設計用來與J2SE 1.2 協作的Commons Coections 組件,它提供了兩個ist實現和八個Map實現。新的基本結構也是可用的而且非常有趣。
  讓我們來看一看這一組特制實現。
  最易理解的是FastArrayist, FastHashMap, 和 FastTreeMap。它們分別繼續了標準的Arrayist、HashMap、和TreeMap,且都提供了在多線程下安全的同步讀寫訪問。然而,安全性是需要成本的,這樣便降低了寫操作的速度。當讀操作是非同步時,寫操作在現存結構被替代時是在一份數據備份上進行地。
  Bag就象是Set,但可以重復。另外它還有兩個實現:HashBag和TreeBag;后者是經排序地。
  另一個新的接口是PriorityQueue。它支持可比較項和使用比較器(Comparator),所以這些項可以BinaryHeap(基于優先級的)來維護,而且隨后可從該堆中刪除。
  剩下的就是一組特定的Map實現。它們提供了非凡目標(specia-purpose)、鍵-值(key-vaue)來查找映射(maps)。
  BeanMap運用反射提供了鍵值對(基于JavaBean屬性);該鍵是屬性名,該值是這一屬性名的值。
  ExtendedProperties繼續了java.uti.Properties;它為單一屬性連接了多個值,而非覆寫它。
  RUMap是一個可維護最大容量的Map,而且使用了至少一個運算法則來定義在這一Map已滿時要移去的節點。
  MutiHashMap有點象WeakHashMap,但它用的是SoftReference而非WeakReference。
  DoubeOrderedMap的重點在于串。它提供了一個Map來支持快速搜索(通過值和鍵)。但有這樣一個要求:鍵和值必須都是唯一的。當然你用兩個TreeMap對象也可以做到,但DoubeOrderedMap對每一個鍵值對僅保存一次。
  
  其它更多的類和接口則更多的支持角色,但仍有一些非凡的方法可用。除了象isSubCoection和合并等一些公用方法外,該框架還包括了附加的Comparators和Iterators。Comparators大部分是用來連鎖或替換另一個Comparator的行為。比如說,java.uti.Coections.reverSEOrder()可以顛倒元素的原順序,而ReverseComparator通過一個比較器(Comparator)來顛倒順序。Iterators是在取出元素之前將每個Coection元素通過一個函數(或方法)的作用。這是JG和ST共享的方法。
  
  JG 4.0
  自1997年以來,JG就沒有任何的更新,所以它的新版本使我很驚奇。我以為JG已沒有了任何目的。顯然,Recursion Software賦予了它其它的目的。該公司公布其基本用戶已超過25萬人,可是我并沒有聽說有誰在使用它。這一新版本與先前3.1版主要有三個不同之初:
  所有的類與接口都集成到了Coections Framework中,且同該框架一樣,默認非同步訪問。
  包的名稱由com.objectspace.jg改成了com.recursionsw.jg。
  Voyager-reated已被廢止。
  假如你對JG還不是很熟悉的話,請參閱JavaWord網站的文章。然而,新版沒有太大的變化,類庫僅能與J2SE 1.3.1和1.4協作。你可以將Coection Framework同JG混用。JG還提供了獨立的抽象數據類型和法則。它支持50種預運算法則,而Coection Framework有18種。我明白為什么有人要學習兩個不同的框架,但是一個好處就是使用JG的人可以將他們的應用程序部分的轉移到Coections Framework中,而非所有。JG對于原是C++的java開發者比起Coections Framework要更熟悉,但是由于JG現在是該框架的一部分,這并不要緊。
  
  Generic types
  最早計劃要對核心集合框架的修改是去支持參數化的數據類型,又稱為原型(generics),或者是模板(tempates)。現在所有的集合都不是型別安全的(type-safe)。你可以將任一個對象加到集合中,而且,在取出一個元素是,

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人在线视频黄色 | 国产免费黄色 | 亚洲成人久久精品 | 91懂色 | 欧美一级美国一级 | 欧美成人一区免费视频 | 91www成人久久 | 黄色网电影 | 91久久91久久精品免观看 | 天天色综合2 | 龙床上的呻吟高h | 毛片在线视频在线播放 | 精品国产一区二区三区四区阿崩 | 国产成人精品免高潮在线观看 | 久久精品亚洲精品国产欧美kt∨ | 深夜免费观看视频 | 九九精品视频观看 | 欧美日韩国产中文字幕 | 国产精品性夜天天视频 | 日本免费一区二区三区四区 | 日韩欧美高清一区 | 爱操影视 | 27xxoo无遮挡动态视频 | 成年性羞羞视频免费观看无限 | 91av在线影院 | 久草欧美 | 国产精品一区99 | 日韩视频一区二区三区在线观看 | 国产激情精品一区二区三区 | 日韩av有码在线 | 精品久久久久久久久久久久久久 | 素人视频在线观看免费 | 九一免费国产 | 国产精品久久久久一区二区 | 爱唯侦察 国产合集 亚洲 | 一本色道精品久久一区二区三区 | 国产午夜精品一区 | av91肉丝一区二区电影 | 一级电影免费在线观看 | 久久在线精品视频 | a黄毛片 |