標籤:組成 倉庫 hash apt lin val 術語 儲存機制 它的
以前一直對於java中容器的概念不理解,雖然學習過,但始終沒有認真理解過,這幾天老師提出了這樣一個問題,你怎麼理解java中的容器。瞬間就蒙了。於是各種搜資料學習了一下,下面是我學習後整理出來的的一些心得。歡迎各路大神指教
在書寫程式時,我們常常需要對大量的對象引用進行管理。為了實現有效歸類管理,我們常常將同類的引用放置在同一個資料容器中。
java容器的組成
1、Collection介面:定義了存取一組對象的方法,他的子介面Set和List分別定義了存取方法。Set中的資料對象沒有順序且不可重複;List中的資料對象有順序且可重複。List又被細分為LinkedList和ArrayList,LinkedList以鏈表的方式來存取資料,ArrayList是以數組方式來儲存資料。
Collection介面定義的方法
| 傳回值 |
方法名(參數類型 參數) |
描述 |
| int |
size() |
容器中對象的數目 |
| boolean |
isEmpty() |
是否為空白 |
| void |
clear() |
清空 |
| boolean |
contains(Object element) |
是不是包含element對象 |
| boolean |
add(Object element) |
添加element的對象 |
| boolean |
remove(Object element) |
移除element對象 |
| Iterator |
iterator() |
返回一個Iterator對象,用於遍曆容器中的對象 |
| boolean |
containsAll(Collection c) |
是否包含c容器中的所有對象 |
| boolean |
addAll(Collection c) |
把c容器中的所有對象添加到容器中 |
| boolean |
removeAll(Collection c) |
從容器中移除C容器中存在的所有對象 |
| boolean |
retainAll(Collection c) |
求當前的集合類與C容器的交集 |
| Object[] |
toArray() |
把容器中的所有對象轉換到對應的數組中
|
(1)List:List容器的中的元素沒有順序,可以重複。List容器中的元素都對應一個整型序號記載著其在容器中的位置。
1.LinkedList:其資料結構採用的是鏈表,這種結構的優勢是刪除和添加的效率很高,但隨機訪問元素時效率較ArrayList類低。
2.ArrayList:其資料結構採用的是線性表,此種結構的優勢是訪問和查詢十分方便,但添加和刪除的時候效率很低。
(2)Set:Set介面沒有提供額外的方法,但實現了Set介面的容器類中的元素是沒有順序,並且不可以重複的。Set容器類似於數學中集合的概念。
1.HashSet:Set類不允許其中存在重複的元素(集),無法添加一個重複的元素。HashMap利用Hash函數進行了查詢效率上的最佳化,其中contain()方法經常被調用,以用於判斷相關元素是否被添加過。
2、Map介面:Map提供的是一種索引值對的方式儲存資料(鍵和值之間是一一對應的)
(1)HashMap:提供了key-value的索引值對的資料存放區機制,可以很方便的通過索引值尋找相應的元素,而且通過Hash散列機制,尋找很方便。
3、Iterator介面:所有實現了Collection介面的容器都有一個iterator方法,用於返回一個實現了Iterator的對象。Iterator對象為迭代器,用於實現對容器中元素的遍曆。
容器就好像一個存放對象的倉庫,可以將你的東西存放在一個無限制的倉庫中,然後要用的時候可以按規律取出來!概念:突破數組的固定尺寸們可以在並不知道需要多少對象的情況或者更複雜的方法儲存物件,提出了容器這個概念!List,Set,Queue和Map這些物件類型本稱為集合類,由於java的類庫中使用了Collection這個名字代表該類庫的一個特殊子集!所以使用了範圍更廣的術語“容器”來稱呼他們!容器比數組的好處在於可以自動調整子集的尺寸。不用擔心應該設定為多大!存放在容器的對象在存放的時候如果沒有聲明繼承自哪個類,那麼它的自動繼承自Object,所以當你取容器的的對象的時候,你得到的只是Object的應用,必須將其轉型為你所要的類型!
java中容器的學習與理解