1. 程式人生 > 其它 >JAVA集合框架的基礎版本有哪些

JAVA集合框架的基礎版本有哪些

簡介

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

 

Vector

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

Stack

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

Hashtable

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變得更加完整。

Java入門推薦:2022年最新整理Java合集_Java適合初學者的教程_Java名師手把手圖解教程_學習Java最快的途徑

以上是小編整理的一套完整的Java學習教程,希望對大家的學習有所幫助!需要其他資料的小夥伴可以在評論區留言哦!