背景
所有集合類都位于java.util包下。集合中隻能儲存對象(儲存對象的引用變量)。當我們把一個對象放入集合中後,系統會把所有集合元素都當成object類的執行個體進行處理。
java的集合類主要由兩個接口派生而出:collection和map,collection和map是java集合架構的根接口,這兩個接口又包含了一些接口或實作類。
set和list接口是collection接口派生的兩個子接口,queue是java提供的隊列實作,類似于list。
map實作類用于儲存具有映射關系的資料(key-value)。
set、list和map可以看做集合的三大類。
list集合是有序集合,集合中的元素可以重複,通路集合中的元素可以根據元素的索引來通路。
set集合是無序集合,集合中的元素不可以重複,通路集合中的元素隻能根據元素本身來通路(也是不能集合裡元素不允許重複的原因)。
map集合中儲存key-value對形式的元素,通路時隻能根據每項元素的key來通路其value。
接口
實作
曆史集合類
set
hashset
treeset
list
arraylist
vector
linkedlist
stack
map
hashmap
hashtable
treemap
properties
collection
collection接口支援如添加和除去等基本操作。設法除去一個元素時,如果這個元素存在,除去的僅僅是集合中此元素的一個執行個體。
boolean add(object element)
boolean remove(object element)
int size()
boolean isempty()
boolean contains(object element)
iterator iterator()
boolean containsall(collection collection)
boolean addall(collection collection)
void clear()
void removeall(collection collection)
void retainall(collection collection)
containsall() 方法允許您查找目前集合是否包含了另一個集合的所有元素,即另一個集合是否是目前集合的子集。其餘方法是可選的,因為特定的集合可能不支援集合更改。
addall() 方法確定另一個集合中的所有元素都被添加到目前的集合中,通常稱為并。 clear() 方法從目前集合中除去所有元素。 removeall() 方法類似于 clear() ,但隻除去了元素的一個子集。
retainall() 方法類似于 removeall()
方法,不過可能感到它所做的與前面正好相反:它從目前集合中除去不屬于另一個集合的元素,即交。
iterator
collection 接口的 iterator() 方法傳回一個 iterator。
1) 使用方法 iterator() 要求容器傳回一個iterator .第一次調用iterator 的next()
方法時,它傳回集合序列的第一個元素。
2)使用next() 獲得集合序列的中的下一個元素。
3)使用hasnext()檢查序列中是否元素。
4) 使用remove()将疊代器新傳回的元素删除
set
set最大的特性就是不允許在其中存放的元素是重複的。
public int size()
:傳回set中元素的數目,如果set包含的元素數大于integer.max_value,傳回integer.max_value
public boolean isempty() :如果set中不含元素,傳回true
public boolean contains(object o) :如果set包含指定元素,傳回true
public iterator iterator():傳回set中元素的疊代器
public object[] toarray() :傳回包含set中所有元素的數組
public object[] toarray(object[] a)
:傳回包含set中所有元素的數組,傳回數組的運作時類型是指定數組的運作時類型
public boolean add(object o) :如果set中不存在指定元素,則向set加入
public boolean remove(object o)
:如果set中存在指定元素,則從set中删除
public boolean removeall(collection c)
:如果set包含指定集合,則從set中删除指定集合的所有元素
public boolean containsall(collection c)
:如果set包含指定集合的所有元素,傳回true。如果指定集合也是一個set,隻有是目前set的子集時,方法傳回true
public boolean addall(collection c)
:如果set中中不存在指定集合的元素,則向set中加入所有元素
public boolean retainall(collection c)
:隻保留set中所含的指定集合的元素(可選操作)。換言之,從set中删除所有指定集合不包含的元素。
如果指定集合也是一個set,那麼該操作修改set的效果是使它的值為兩個set的交集
public void clear() :從set中删除所有元素
hashset、linkedhashset、treeset
list
當我們不知道存儲的資料有多少的情況,我們就可以使用list
來完成存儲資料的工作。例如前面提到的一種場景。我們想要在儲存一個應用系統目前的線上使用者的資訊。我們就可以使用一個list來存儲。因為list的最大的特點就是能夠自動的根據插入的資料量來動态改變容器的大小。在 list
中搜尋元素可以從清單的頭部或尾部開始,如果找到元素,還将報告元素所在的位置。
void add(int index, object element)
:添加對象element到位置index上
boolean addall(int index, collection collection)
:在index位置後添加容器collection中所有的元素
object get(int index) :取出下标為index的位置的元素
int indexof(object element) :查找對象element
在list中第一次出現的位置
int lastindexof(object element) :查找對象element
在list中最後出現的位置
object remove(int index) :删除index位置上的元素
object set(int index, object element) :将index位置上的對象替換為element
并傳回老的元素。
<code>listiterator</code> 接口繼承 <code>iterator</code>
接口以支援添加或更改底層集合中的元素,還支援雙向通路。
map
數學中的映射關系在java中就是通過map來實作的。它表示,裡面存儲的元素是一個對(pair),我們通過一個對象,可以在這個映射關系中找到另外一個和這個對象相關的東西。
<code>object put(object key,object value)</code><code>:用來存放一個鍵</code><code>-</code><code>值對</code><code>map</code><code>中</code>
<code>object remove(object key)</code><code>:根據</code><code>key(</code><code>鍵</code><code>)</code><code>,移除一個鍵</code><code>-</code><code>值對,并将值傳回</code>
<code>void putall(map mapping)</code><code>:将另外一個</code><code>map</code><code>中的元素存入目前的</code><code>map</code><code>中</code>
<code>void clear()</code><code>:清空目前</code><code>map</code><code>中的元素</code>
<code>object get(object key)</code><code>:根據</code><code>key(</code><code>鍵</code><code>)</code><code>取得對應的值</code>
<code>boolean containskey(object key)</code><code>:判斷</code><code>map</code><code>中是否存在某鍵(</code><code>key</code><code>)</code>
<code>boolean containsvalue(object value):</code><code>判斷</code><code>map</code><code>中是否存在某值</code><code>(value)</code>
<code>int size():</code><code>傳回</code><code>map</code><code>中</code><code></code>鍵-值對的個數
<code>boolean isempty()</code><code>:判斷目前</code><code>map</code><code>是否為空</code>
<code>public set keyset()</code><code>:傳回所有的鍵(</code><code>key</code><code>),并使用</code><code>set</code><code>容器存放</code>
<code>public collection values()</code><code>:傳回所有的值(</code><code>value</code><code>),并使用</code><code>collection</code><code>存放</code>
<code>public set entryset()</code><code>:</code>傳回一個實作 map.entry
接口的元素 set
hashmap若遇到重複的key,覆寫掉以前的
從運作結果,我們可以看出,hashmap的存入順序和輸出順序無關。而linkedhashmap
則保留了鍵值對的存入順序。treemap則是對map中的元素進行排序。在實際的使用中我們也經常這樣做:使用hashmap或者linkedhashmap
來存放元素,當所有的元素都存放完成後,如果使用則是需要一個經過排序的map的話,我們再使用treemap來重構原來的map對象。這樣做的好處是:因為hashmap和linkedhashmap
存儲資料的速度比直接使用treemap
要快,存取效率要高。當完成了所有的元素的存放後,我們再對整個的map中的元素進行排序。這樣可以提高整個程式的運作的效率,縮短執行時間。
轉載請注明出處: