天天看點

java.容器類(list,queue,map,set)1.Collection2.List3.Queue4.Set5.Map6.Abstract

public interface collection<e> extendsiterable<e> 

set,queue和list 都繼承了collection。map沒有。

collection接口的方法:

    boolean add(object o)   :向集合中加入一個對象的引用

    void clear()                        :删除集合中所有的對象,即不再持有這些對象的引用

    boolean isempty()           :判斷集合是否為空

    boolean contains(object o): 判斷集合中是否持有特定對象的引用

    iterartor iterator()        : 傳回一個iterator對象,可以用來周遊集合中的元素

    boolean remove(object o)    :從集合中删除一個對象的引用

    int size()                               :傳回集合中元素的數目

    object[] toarray()                 :傳回一個數組,該數組中包括集合中的所有元素

boolean java.util.collection.addall(collection<? extends e> c)

求this與c的并集,然後儲存在this對象中。若求交集過程中this對象的集合資料有變化,傳回true。

boolean java.util.collection.retainall(collection<?> c)

求this與c的交集,然後儲存在this對象中。若求交集過程中this對象的集合資料有變化,傳回true。

boolean java.util.collection.removeall(collection<?> c)

求this與c的差集,this-c,然後儲存在this對象中。若求交集過程中this對象的集合資料有變化,傳回true。

collection的tostring()方法生成可讀性很好的字元串,[e1,e2,...,en]

public interface list<e> extends

collection<e> 

實作類:

arraylist : 變長數組。相鄰元素記憶體位址也相鄰,可以對元素進行随機的通路,插入與删除元素的速度慢。

linkedlist: 連結清單數組。插入和删除速度快,通路速度慢。

常用方法:

<t> t[] java.util.list.toarray(t[] a)

這個方法很變态。list本身就是一個泛型接口,好好的<e>不用,非得轉換成函數中的泛型t。此函數的行為依賴于實作類,以arraylist為例,a長度與内部實作是相關的,見圖1.

java.容器類(list,queue,map,set)1.Collection2.List3.Queue4.Set5.Map6.Abstract

圖1 arraylist.toarray()函數實作

object[] java.util.list.toarray()

傳回的是object。

e java.util.list.set(int index, e element)

将第i個元素替換成新元素。

void java.util.list.add(int index, e element)

将元素插入到第i個位置上。

int java.util.list.indexof(object o)

傳回元素o第一次出現的位置。若沒有,傳回-1。

list<e> java.util.list.sublist(int fromindex, int toindex)

傳回子清單。

public interface queue<e> extends

collection<e> {}

boolean java.util.queue.add(e e)

在隊列尾部添加指定元素。

e java.util.queue.element()

傳回隊列頭部的元素,但并不從隊列中删除該元素,當隊列為空時此方法會抛出異常。

e java.util.queue.peek()

傳回隊列頭部的元素,但并不從隊列中删除該元素,當隊列為空時此方法傳回null,不抛異常。

e java.util.queue.remove()

傳回隊列頭部的元素,并從隊列中删除該元素,當隊列為空時此方法會抛出異常。

e java.util.queue.poll()

檢索并删除元素,隊列為空時傳回null,不抛異常。

linkedlist。

public interface set<e> extends

collection<e>{}

set是最簡單的一種集合。沒有重複元素。不能按下标來取,隻能通過iterator通路元素。

add(object o)方法,若待添加的元素已在集合中,傳回false。

hashset : 為快速查找設計的set。存入hashset的對象必須定義hashcode()。 

treeset : 儲存自然次序的set,底層為樹結構。使用它可以從set中提取有序的序列。

linkedhashset : 具有hashset的查詢速度,存入linkedhashset的對象必須定義hashcode()。内部使用連結清單維護元素的插入次序。于是在使用疊代器周遊set時,結果會按元素插入的次序顯示。

public interface map<k,v> 

存放多組鍵值對。

v java.util.map.put(k key, v value)

添加指定的鍵值對。若k 已存在,新的value會覆寫舊的。傳回值為此key對應的舊的value,顯然沒有舊的對應關系時傳回null。

v java.util.map.get(object key)

通過key獲得value。若key不存在傳回null。

set<k> java.util.map.keyset()

傳回鍵的集合。

collection<v> java.util.map.values()

傳回值的集合。

boolean java.util.map.containskey(object key)

略。

boolean java.util.map.containsvalue(object value)

void java.util.map.clear()

boolean java.util.map.remove(object key, object value)

删除已有的鍵值對。

tostring()生成的結果格式形如: {a=1,b=2,...,z=26}

java.util.treemap

紅黑樹實作。需要實作comparable接口。最好同時重寫equals()方法。treemap可以按照元素間從小到大的順序周遊。

java.util.hashmap

基于哈希表實作。使用hashmap,需要同時重寫hashcode()和equals()方法。比起其他map的實作類,它的查找速度最快。

java.util.linkedhashmap

在map接口内部還有一個接口: interface entry<k,v> {...},用來存儲鍵值對。

它的實作類也都是相應map實作類的内部類,不友善直接用。可以嘗試自己實作一個類:

public abstract class abstractlist<e> extends abstractcollection <e> implements list<e>

public abstract class abstractqueue<e> extends abstractcollection <e> implements queue<e> {}