集合框架 List與Set

2021-07-11 21:45:00 字數 4759 閱讀 6367

所有的集合框架並不存放真正的物件,而是持有物件的引用

list與set都繼承自collection

list的實現類:arraylist,linklist,vector

set的實現類:hashset,linkedhashset,sortset(介面),treeset(實現sortset).

首先介紹一下ordered與sorted介面的區別

ordered:按照某種後天規定的順序遍歷其中的所有元素,可以想成佇列,按照存入順序排隊。

sorted:按照天然的順序進行排序,不受外界影響。即使你輸入的順序是亂序,儲存中都會以天然的順序排序。

實現該介面的類均屬於ordered型別。按照索引先後順序排列的。列表中的索引從0開始

常用方法:

boolean add(object o)//將o新增到列表的尾部,成功返回true,反之則反

void add(int

index,object o)//在該索引位置新增o,索引原來物件依次後移

boolean addall(collection c)//將c列表中的所有元素新增到列表的尾部,成功返回true

boolean addall(int

index,collection)//將c列表中的元素新增到列表索引位置index處,然後列表中原來的元素一次後移

boolean contains(object o)//檢查列表中是否包含元素o,有返回true

boolean containsall(collection c)//測試列表中是否包含列表c中所有元素,有返回true

void clear()//該方法移除列表中所有元素

object get(int

index)//返回列表索引為index處的元素\

int indexof(object o)//返回列表中o的第一次出現的索引位置,不存在返回負數

int lastindexof(object o)//返回列表中o最後一次出現的索引位置,不存在返回負數

boolean isempty()//判斷列表是否為空,空返回true

object remove(int

index)//移除索引位置為index處的元素,並且返回出來,後面的元素依次前移

boolean removeall(collection c)//移除測試列表中在c列表中存在的元素,如果移除返回true

boolean retainall(collection c)//保留測試列表中在c中存在的元素,其他的全部移除,做一次交集,若有元素移除返回true

object set(int

index,object o)//將索引為index的元素替代為o,返回被替代的元素

list sublist(int fromindex,int toindex)//返回乙個新的列表,列表中的元素索引為測試列表下標中的[fromindex,toindex),左閉右開

int size()//返回列表的元素數

object toarray()//將列表轉換為物件陣列

//列表轉換為陣列,這個不是列表中的方法

public

static list aslist(t a)

//使用例項

string s =

list l = arrays.aslist(s);

arraylist:內部實現依賴陣列,對元素的隨機訪問效能很好,但是如果有大量的刪除,插入操作時並不合適。

構造方法:

public

arraylist()//構造乙個空的,預設大小是10

public

arraylist(int initialcapacity)//同樣是空的,初始容量是initialcapacity

public

arraylist(collectio c)//將列表c中的元素初始化給新建的列表。

linkedlist:依靠雙鏈表實現的,與arraylist優缺點剛好相反

構造方法:

public

linkedlist()//構造空的物件

public

linkedlist(collection c)//將列表c中的元素初始化賦值給新建的列表

vector:效能與arraylist相似,但是它是同步的,多執行緒同步訪問的時候根據需求可以採用,但是會降低效能。

list中可以存在重複的值,而set中不允許重複值出現。

list中元素的順序是元素的新增順序,set的元素沒有順序。

常用方法:與arraylist類似,但是凡與index相關的都沒有,因為它是無序存放的,所以沒有索引

hashset

既不是ordered也不是sorted,元素在其中的存放是完全無序的,hashset儲存物件引用的是按照雜湊策略實現的,可以向其中新增null值,但是只能一次.

在儲存自定義的類的物件的時候,要複寫public int hashcode()與public boolean equals()方法,保證儲存的資料唯一性。

建構函式

public

hashset()//空的hashset物件,初始容量是16

public

hashset(int initialcapacity)//空的hashset物件,初始容量是initialcapacity

public

hashset(collection c)//將列表c中的元素初始化給新建的hashset

linkedhashset

是ordered的,採用雙鏈表實現,元素的儲存順序是元素的插入順序,其他與hashset相同。建構函式也是類似,不過多介紹。

sortedset

繼承set,不但具有set的所有方法,而且時乙個sorted型別的set。實現該介面的類將按照元素天然順序自動排序,不管插入順序,最終都會按照天然順序。

常用方法

object first()//返回sortedset中的第乙個元素

object last()//返回sortedset中的最後乙個元素

sortedset headset(object toelement)//返回乙個小於指定元素的並且不包含該元素的sortedset

sortedset tailset(object fromelement)//返回乙個大於指定元素並且包含該元素的sortedset

sortedset subset(object fromelement, object toelement)//返回乙個包含起始元素到不包含結束元素的sortedset

treeset

實現sortedset 介面,保持天然順序儲存

treeset沒有採用雜湊儲存策略,因此不會呼叫hashcode()方法,但是同樣不能有重複元素,採用compareto方法替代equals方法。

treeset儲存方式按照紅黑樹的結構進行儲存,所以插入新的元素時不會與所有的元素進行比較

儲存自定義類的物件時,為了保證有序,必須複寫public int compareto(object o)方法。

自定義比較器,實現不同的排序方式

class

aimplements

comparator

}main()

建構函式

public

treeset()//構造乙個空的treeset物件

public

treeset(sortedset s)//構造乙個元素以s中元素為初始內容的treeset物件

public

treeset(collection c)//構造乙個元素以c中元素為初始內容的treeset物件

public

treeset(comparator c)引數c作為比較器,構造具有比較器的空treeset物件

iterator

對於list來說,可以利用元素的索引進行遍歷,然而set是沒有的,此時需要迭代器實現遍歷,所有實現collection的類都有乙個名稱為iterator的方法來獲取迭代器

獲取迭代器方法

collection cset = new treeset();

collection clist = new arraylist();

iterator i1 = cset.iterator();

iterator i2 = clist.iterator();

常用方法

boolean hasnext()

//測試集合中是否還有沒有遍歷的元素,存在返回true

object

next()

//該方法返回下乙個將要遍歷的元素,通常與hasnext()連用,返回的物件是object型別的引用,取出時需要自行強轉。

void remove()

//將下乙個要遍歷的元素移除。

for-each

for(《引用型別》《引用變數》 : 《集合引用》){}

hashset hs = new hash(collection c);

for(object o : hs)

List集合 Set集合

一 請簡述list介面的特點。v 它是乙個元素訪問有序的集合。例如,存元素的順序是11 22 33。那麼集合中,元素的儲存就是按照11 22 33的順序完成的 v 它是乙個帶有索引的集合,通過索引就可以精確的操作集合中的元素 與陣列的索引是乙個道理 v 集合中可以有重複的元素,通過元素的equals...

集合框架Set

1 hashset雜湊表儲存底層 2 list與set判斷重複物件的區別 3 集合框架treeset 的自然排序 比較器排序 一般來說 set是無序的 無下標 但是jdk1.8版本已經可以排序 1 hashset雜湊表儲存底層 set 會去除重複 資料結構是雜湊表 hashseths new has...

集合框架Set

元素是無序 存入和取出的順序不一定一致 元素不可以重複 hashset雜湊表儲存 底層資料結構是雜湊表 1.1hashset的元素不可重複 hashset元素是不可重複的,針對於基本資料型別以及string,引用資料型別 物件 去重需要重寫hashcode方法以及equals方法 論證 1.2has...