所有的集合框架並不存放真正的物件,而是持有物件的引用
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...