亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

Java集合構架研究之一

2019-11-18 14:28:48
字體:
來源:轉載
供稿:網友

  摘要:

  本文論述了java容器類庫的產生、變化與發展,然而并沒有具體講解怎么使用這些類庫,試圖從其發展與變化的歷史中幫助Java學習者把握Java的容器類庫。另外在本篇最后會討論在即將發布的代號為Tiger的J2SE1.5中加入的新特性之一:泛型,它將使容器的功能更加強大。

  一、集合論引述

  集合論是現代數學中重要的基礎理論。它的概念和方法已經滲透到代數、拓撲和分析等許多數學分支以及物理學和質點力學等一些自然科學部門,為這些學科提供了奠基的方法,改變了這些學科的面貌。計算機科學作為一門現代科學因其與數學的緣源,自然其中的許多概念也來自數學,集合是其中之一。假如說集合論的產生給數學注入了新的生氣與活力,那么計算機科學中的集合概念給程序員的生活也注入了新的生氣與活力。

  1、什么是集合

  很難給集合下一個精確的定義,通常情況下,把具有相同性質的一類東西,匯聚成一個整體,就可以稱為集合。比如,用Java編程的所有程序員,全體中國人等。通常集合有兩種表示法,一種是列舉法,比如集合A={1,2,3,4},另一種是性質描述法,比如集合B={X0<X<100且X屬于整數}。集合論的奠基人康托爾在創建集合理論給出了許多公理和性質,這都成為后來集合在其它領域應用的基礎,本文并不是講述集合論的,所以假如你對集合論感愛好,可以參考相關書籍。

  2、什么是集合框架

  那么有了集合的概念,什么是集合框架呢?集合框架是為表示和操作集合而規定的一種統一的標準的體系結構。任何集合框架都包含三大塊內容:對外的接口、接口的實現和對集合運算的算法。

  接口:即表示集合的抽象數據類型。接口提供了讓我們對集合中所表示的內容進行單獨操作的可能。

  實現:也就是集合框架中接口的具體實現。實際它們就是那些可復用的數據結構。

  算法:在一個實現了某個集合框架中的接口的對象身上完成某種有用的計算的方法,例如查找、排序等。這些算法通常是多態的,因為相同的方法可以在同一個接口被多個類實現時有不同的表現。事實上,算法是可復用的函數。

  假如你學過C++,那C++中的標準模版庫(STL)你應該不生疏,它是眾所周知的集合框架的絕好例子。
  3、集合框架對我們編程有何助益

  到底集合框架對我們編程有什么好處呢?

  它減少了程序設計的辛勞。集合框架通過提供有用的數據結構和算法使你能集中注重力于你的程序的重要部分上,而不是為了讓程序能正常運轉而將注重力于低層設計上。通過這些在無關API之間的簡易的互用性,使你免除了為改編對象或轉換代碼以便聯合這些API而去寫大量的代碼。

  它提高了程序速度和質量。集合框架通過提供對有用的數據結構和算法的高性能和高質量的實現使你的程序速度和質量得到提高。因為每個接口的實現是可互換的,所以你的程序可以很輕易的通過改變一個實現而進行調整。另外,你將可以從寫你自己的數據結構的苦差事中解脫出來,從而有更多時間關注于程序其它部分的質量和性能。

  減少去學習和使用新的API 的辛勞。許多API天生的有對集合的存儲和獲取。在過去,這樣的API都有一些子API幫助操縱它的集合內容,因此在那些非凡的子API之間就會缺乏一致性,你也不得不從零開始學習,并且在使用時也很輕易犯錯。而標準集合框架接口的出現使這個問題迎刃而解。

  減少了設計新API的努力。設計者和實現者不用再在每次創建一種依靠于集合內容的API時重新設計,他們只要使用標準集合框架的接口即可。

  集合框架鼓勵軟件的復用。對于遵照標準集合框架接口的新的數據結構天生即是可復用的。同樣對于操作一個實現了這些接口的對象的算法也是如此。

  有了這些優點,并通過合理的使用,它就會成為程序員的一種強大的工具。不過,從歷史上來看,集合大多其結構相當復雜,也就給它們一個造成極不合理的學習曲線的壞名聲。但是,希望Java2的集合框架能縮短你的學習曲線,從而快速把握它。

  在許多高級語言中的數組其實也是集合的一種簡單實現,比如C,C++,Pascal和Java。

  數組保存著相同類型的多個值,它的長度在數組被創建時就固定下來,建立之后就無法改變。假如你需要一種大小能動態改變的存儲結構,數組就不適合了,這時集合框架就有了用武之地了。

  二、Java1.2之前的容器類庫

  其實在Java2之前,Java是沒有完整的集合框架的。它只有一些簡單的可以自擴展的容器類,比如Vector,Stack,Hashtable等。Vector中包含的元素可以通過一個整型的索引值取得,它的大小可以在添加或移除元素時自動增加或縮小。然而,Vector的設計卻存在極多缺限(下面會說到)。Stack是一種后進先出(LIFO)的堆棧序列,學過數據結構的都會知道,它的重要特點是先放入的東西最后才能被取出。Hashtable與Java2中的Map類似,可以看成一種關聯或映射數組,可以將兩個或多個毫無關系的對象相關聯,與數組不同的是它的大小可以動態變化。

  Vector的操作很簡單,通過addElement()加入一個對象,用elementAt()取出它,還可以查詢當前所保存的對象的個數size();另外還有一個Enumeration類提供了連續操作Vector中元素的方法,這可以通過Vector中的elements()方法來獲取一個Enumeration類的對象,可以用一個While循環來遍歷其中的元素。用hasMoreElements()檢查其中是否還有更多的元素。用nextElement()獲得下一個元素。Enumeration的用意在于使你能完全不用理會你要遍歷的容器的基礎結構,只關注你的遍歷方法,這也就使得遍歷方法的重用成為可能。由于這種思想的強大功能,所以在Java2中被保留下來,不過具體實現,方法名和內部算法都改變了,這就是Java2中的Iterator以及ListIterator類。然而Enumeration的功能卻十分有限,比如只能朝一個方向進行,只能讀取而不能更改等。

  另一個單元素容器是Stack,它最常用的操作便是壓入和彈出,最后壓入的元素最先被彈出。你可以想象一個只上面開口的書箱,最后放進去的書一定是最先被拿到,而最先放進去的只有在全部書拿出后才能取出,這種特性被稱為后進先出(LIFO)。在Java中Stack的的用法也很簡單,有push()壓入一個元素,用pop()彈出一個元素。然而它的設計卻無法讓人理解,Stack繼續了Vector而不用Vector作為其中一個元素類型來實現其功能,這樣造成的結果是Stack也擁有Vector的行為,也就是說你可以把Stack當作一個Vector來用,而這與Stack的用意毫無關系。這應該算為Java1(1.0/1.1)中容器類庫設計者的一大失誤吧,還好,這些在Java2中都有了相當大的改變觀。

  Hashtable也是Java1中一個有用的容器類庫。它的基本目標是實現兩個或多個對象之間進行關聯。舉一個現實生活中的例子,比如我們說美國白宮時,指的就是在美國華盛頓的總統辦公大樓,為什么一說到美國白宮,總統辦公大樓呢?這是我們人為的對“美國白宮”和總統辦公大樓進行了關聯,本來“美國白宮”就是四個普通的文字,現在卻有了不同的含義。在Java中我們就可以用String定義一個內容為“美國白宮”的對象變量,在定義一個總統大樓的對象變量,把它們進行關聯,這就是Hashtable的用意。通過使用pub(Object key,Object value)方法把兩個對象進行關聯,需要時用get(Object key)取得與key關聯的值對象。還可以查詢某個對象的索引值等等。值得說明的這里的get方法查找一個對象時與Vector中的get方法在內部實現時有很大不同,在一個Hashtable中查找一個鍵對象要比在一個Vector中快的多。這是因為Hashtable使用了一種哈希表的技術(在數據結構中有具體講解),在Java每個對象缺省都有一個通過Object的hashCode()方法獲得的哈希碼,Hashtable就是利用這個哈希實現快速查找鍵對象的。

  Java1容器類庫設計的另一個重大失誤是竟然沒有對容器進行排序的工具。比如你想讓Vector容器中的對象按字典順序進行排序,你就要自己實現。

  雖然Java1中的容器類庫如此簡陋,卻也使Java程序員在當時編程時省力不少,那些容器類也被大量用到,正所謂無可奈何,沒得選擇。

  可能是Java在其成長過程一直被漂亮的光環籠照著,所以它的缺點也被人們忽略了,幸好,在Java2中容器類庫設計者對以前的拙劣設計進行了大刀闊斧的整改,從而使Java變得更加完美。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91色视频在线观看| 国产免费久久av| 91tv亚洲精品香蕉国产一区7ujn| 欧美一区第一页| 国产精品色婷婷视频| 久久精品在线播放| 欧美黄色片免费观看| 欧美性xxxxx| 操日韩av在线电影| 久久久久亚洲精品| 法国裸体一区二区| 亚洲电影免费观看高清| 国产亚洲xxx| 亚洲男人第一网站| 日韩精品视频免费| 最新国产精品拍自在线播放| 国产精品户外野外| 97**国产露脸精品国产| 68精品国产免费久久久久久婷婷| 亚洲国产精品女人久久久| 亚洲а∨天堂久久精品喷水| 久久五月天综合| 国产精品丝袜高跟| 伊人伊成久久人综合网小说| 欧美日韩激情美女| 91av福利视频| 欧美精品中文字幕一区| 岛国av一区二区| 亚洲美女精品成人在线视频| 欧美丝袜美女中出在线| 97视频在线观看视频免费视频| 国产欧美一区二区三区视频| 国产一区深夜福利| 国产婷婷色综合av蜜臀av| 国产日韩亚洲欧美| 国产日韩换脸av一区在线观看| 国产精品流白浆视频| 91精品久久久久久| 亚洲毛茸茸少妇高潮呻吟| 久久精品中文字幕一区| 欧美性xxxx极品高清hd直播| 97免费视频在线播放| 精品视频久久久| 国产精品自产拍在线观| 色多多国产成人永久免费网站| 日韩av电影国产| 欧美整片在线观看| 九色成人免费视频| 日本在线观看天堂男亚洲| 久久国产精品99国产精| 成人精品久久av网站| 91精品在线播放| 国产精品日韩欧美大师| 成人午夜一级二级三级| 亚洲区免费影片| 668精品在线视频| 2020国产精品视频| 日韩精品视频在线观看免费| 国产在线拍揄自揄视频不卡99| 久久视频在线直播| 国产精品va在线播放我和闺蜜| 亚洲一区第一页| 国产成人高潮免费观看精品| 日韩在线视频观看正片免费网站| 69国产精品成人在线播放| 精品国产一区二区三区久久久| 亚洲国产成人精品电影| 亚洲精品丝袜日韩| 久久久久久久999| 欧美日韩久久久久| 欧美精品少妇videofree| 91网站免费看| 欧洲s码亚洲m码精品一区| 91精品久久久久久久久久| 欧美风情在线观看| 国产精品日韩在线一区| 爽爽爽爽爽爽爽成人免费观看| 操日韩av在线电影| 欧美野外猛男的大粗鳮| 国产精品亚洲第一区| 中文字幕日韩欧美精品在线观看| 久久久久久久久久久人体| 日韩一区在线视频| 欧美日韩亚洲高清| 精品福利在线观看| 美女精品视频一区| 欧美精品一区二区免费| 精品欧美激情精品一区| 成人乱色短篇合集| 国产一区二区丝袜| 亚洲精品电影网| 97国产精品视频| 久久韩剧网电视剧| 97视频国产在线| 最新亚洲国产精品| 成人在线国产精品| 欧美激情精品久久久| 久久亚洲影音av资源网| 精品国产一区二区三区在线观看| 国产日韩欧美在线| 日韩精品免费在线观看| 欧美做爰性生交视频| 啊v视频在线一区二区三区| 国产精品久久久久久超碰| 国内精品国产三级国产在线专| 精品小视频在线| 成人av资源在线播放| 欧美精品日韩三级| 亚洲色在线视频| 亚洲第一页自拍| 国产精品免费电影| 欧美日韩黄色大片| 国产欧亚日韩视频| 日韩在线资源网| 久久九九免费视频| 日韩久久精品电影| 4p变态网欧美系列| 黄网站色欧美视频| 欧美亚洲另类激情另类| 成人免费看片视频| 日韩二区三区在线| 久久精品影视伊人网| 日韩av不卡在线| 日韩av在线精品| 欧美第一淫aaasss性| 国产91在线播放精品91| 综合国产在线视频| 日韩有码在线电影| 国产成人久久精品| 美女啪啪无遮挡免费久久网站| 欧美日韩国产一中文字不卡| 亚洲欧美日韩视频一区| 欧美一级淫片aaaaaaa视频| 亚洲国产欧美一区二区丝袜黑人| 日韩国产中文字幕| 欧美激情欧美激情| 亚洲色图第三页| 精品国产福利在线| 欧美日韩国产精品一区二区三区四区| 高清欧美一区二区三区| 亚洲黄色成人网| 国产亚洲人成a一在线v站| 亚洲综合精品一区二区| 91精品国产高清久久久久久91| 亚洲r级在线观看| 97在线看福利| 日韩精品视频中文在线观看| 亚洲欧美日韩视频一区| 欧美性xxxx极品高清hd直播| 欧美激情手机在线视频| 亚洲精品成人久久| 亚洲欧美日韩在线一区| 亚洲一区二区福利| 国产精品盗摄久久久| 亚洲精品电影网在线观看| 色av中文字幕一区| 成人免费看吃奶视频网站| 亚洲图中文字幕| 91视频8mav| 色小说视频一区| 国产日韩一区在线| 色哟哟亚洲精品一区二区| 国产情人节一区| 国产有码一区二区|