複製鏈接
請複製以下鏈接發送給好友

java集合類

鎖定
集合類是Java數據結構的實現。Java的集合類是java.util包中的重要內容,它允許以各種方式將元素分組,並定義了各種使這些元素更容易操作的方法。Java集合類是Java將一些基本的和使用頻率極高的基礎類進行封裝和增強後再以一個類的形式提供。集合類是可以往裏面保存多個對象的類,存放的是對象,不同的集合類有不同的功能和特點,適合不同的場合,用以解決一些實際問題。
中文名
Java集合類
外文名
Java collection class
存放數據類型
對象
特    點
容易擴展和修改等
功    能
提升程序的運行速度和質量等
所屬領域
計算機科學技術

java集合類簡述

集合類是用來存放某類對象的。集合類有一個共同特點,就是它們只容納對象(實際上是對象名,即指向地址的指針)。這一點和數組不同,數組可以容納對象和簡單數據。如果在集合類中既想使用簡單數據類型,又想利用集合類的靈活性,就可以把簡單數據類型數據變成該數據類型類的對象,然後放入集合中處理,但這樣執行效率會降低。
集合類容納的對象都是Object類的實例,一旦把一個對象置入集合類中,它的類信息將丟失,也就是説,集合類中容納的都是指向Object類對象的指針。這樣的設計是為了使集合類具有通用性,因為Object類是所有類的祖先,所以可以在這些集合中存放任何類而不受限制。當然這也帶來了不便,這令使用集合成員之前必須對它重新造型。
集合類是Java數據結構的實現。在編寫程序時,經常需要和各種數據打交道,為了處理這些數據而選用數據結構對於程序的運行效率是非常重要的。 [1] 

java集合類提出背景

在沒有集合類之前,實際上在Java語言裏已經有一種方法可以存儲對象,那就是數組。數組不僅可以存放基本數據類型也可以容納屬於同一種類型的對象。數組的操作是高效率的,但也有缺點。比如數組的長度是不可以變的,數組只能存放同一種類型的對象(或者説對象的引用)。
另外,在程序設計過程中,程序員肯定會經常構建一些特殊的數據結構以正確的描述或者表達現實情況。比如描述火車進站出站,他們會用到“棧”這個數據結構,常用的數據結構還有:隊列、鏈接表、和散列表等等。這些數據結構幾乎在每一段程序設計過程中都會使用到,但是如果每次編程都要重新構建這些數據結構顯然違背了軟件組件化的思想。因此Java的設計者考慮把這些通用的數據結構做成API供程序員調用。
基於以上幾點必須解決的問題。Java提供了對象的數種保存方式,除了內置的數組以外,其餘的稱為集合類。為了使程序方便地存儲和操縱數目不固定的一組數據,JDK中提供了Java集合類,所有Java集合類都位於Java.util包中,與Java數組不同,Java集合不能存放基本數據類型數據,而只能存放對象的引用。 [2] 

java集合類分類

Java中的集合類可以分為兩大類:一類是實現Collection接口;另一類是實現Map接口
Collection是一個基本的集合接口,Collection中可以容納一組集合元素(Element)。
Map沒有繼承Collection接口,與Collection是並列關係。Map提供鍵(key)到值(value)的映射。一個Map中不能包含相同的鍵,每個鍵只能映射一個值。
Collection有兩個重要的子接口List和Set。List表達一個有序的集合,List中的每個元素都有索引,使用此接口能夠準確的控制每個元素插入的位置。用户也能夠使用索引來訪問List中的元素,List類似於Java的數組。Set接口的特點是不能包含重複的元素。對Set中任意的兩個元素element1和element2都有elementl.equals(element2)= false。另外,Set最多有一個null元素。此接口模仿了數學上的集合概念。
Collection接口、List接口、Set接口以及相關類的關係如圖1所示。
圖1 圖1
如前面提到的,Map接口與Collection接口不同,Map提供鍵到值的映射。Map接口提供三種Collection視圖,允許以鍵集、值集或鍵一值映射關係集的形式查看某個映射的內容。Map接口及其相關類的關係如圖2所示。 [3] 
圖2 圖2

java集合類特點

集合類的特點有三個:
第一點,集合類這種框架是高性能的。對基本類集(動態數組,鏈接表,樹和散列表)的實現是高效率的。一般人很少去改動這些已經很成熟並且高效的APl;
第二點,集合類允許不同類型的集合以相同的方式和高度互操作方式工作;
第三點,集合類容易擴展和修改,程序員可以很容易地稍加改造就能滿足自己的數據結構需求。 [2] 

java集合類集合類帶來的好處

使用Java提供的集合類有如下功能:
(1)降低編程難度:在編程中會經常需要鏈表向量等集合類,如果自己動手寫代碼實現這些類,需要花費較多的時間和精力。調用Java中提供的這些接口和類,可以很容易的處理數據。
(2)提升程序的運行速度和質量:Java提供的集合類具有較高的質量,運行時速度也較快。使用這些集合類提供的數據結構,程序員可以從“重複造輪子”中解脱出來,將精力專注於提升程序的質量和性能。
(3)無需再學習新的APl:藉助泛型,只要瞭解了這些類的使用方法,就可以將它們應用到很多數據類型中。如果知道了LinkedList的使用方法,也會知道LinkedList怎麼用,則無需為每一種數據類型學習不同的API。
(4)增加代碼重用性:也是藉助泛型,就算對集合類中的元素類型進行了修改,集合類相關的代碼也幾乎不用修改。 [3] 
參考資料
  • 1.    房曉溪主編.Java程序設計[M].北京:中國電力出版社,2005.02:100
  • 2.    林曉宇,賴賢偉,寧正元編著.Java程序設計[M].南京:東南大學出版社,2007.08
  • 3.    張席主編.JAVA語言程序設計教程[M].西安:西安電子科技大學出版社,2015.08:91-92