1. List簡(jiǎn)介
實(shí)際上有兩種List:
一種是基本的ArrayList,其優(yōu)點(diǎn)在于隨機(jī)訪問(wèn)元素
另一種是LinkedList,它并不是為快速隨機(jī)訪問(wèn)設(shè)計(jì)的,而是快速的插入或刪除。
ArrayList:由數(shù)組實(shí)現(xiàn)的List。允許對(duì)元素進(jìn)行快速隨機(jī)訪問(wèn),但是向List中間插入與移除元素的速度很慢。
LinkedList :對(duì)順序訪問(wèn)進(jìn)行了優(yōu)化,向List中間插入與刪除的開(kāi)銷并不大。隨機(jī)訪問(wèn)則相對(duì)較慢。 還具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 這些方法 (沒(méi)有在任何接口或基類中定義過(guò))使得LinkedList可以當(dāng)作堆棧、隊(duì)列和雙向隊(duì)列使用。
2. Set簡(jiǎn)介
Set具有與Collection完全一樣的接口,因此沒(méi)有任何額外的功能。實(shí)際上Set就是Collection,只是行為不同。
這是繼承與多態(tài)思想的典型應(yīng)用:表現(xiàn)不同的行為。Set不保存重復(fù)的元素(至于如何判斷元素相同則較為負(fù)責(zé))
Set : 存入Set的每個(gè)元素都必須是唯一的,因?yàn)镾et不保存重復(fù)元素。加入Set的元素必須定義equals()方法以確保對(duì)象的唯一性。
Set與Collection有完全一樣的接口。Set接口不保證維護(hù)元素的次序。
HashSet:為快速查找設(shè)計(jì)的Set。存入HashSet的對(duì)象必須定義hashCode()。
TreeSet: 保存次序的Set, 底層為樹(shù)結(jié)構(gòu)。使用它可以從Set中提取有序的序列。
3. list與Set區(qū)別
?、?List,Set都是繼承自Collection接口;
?、?List特點(diǎn):元素有放入順序,元素可重復(fù) ,Set特點(diǎn):元素?zé)o放入順序,元素不可重復(fù),重復(fù)元素會(huì)覆蓋掉,元素雖然無(wú)放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實(shí)是固定的,加入Set 的Object必須定義equals()方法 ,另外list支持for循環(huán),也就是通過(guò)下標(biāo)來(lái)遍歷,也可以用迭代器,但是set只能用迭代,因?yàn)樗麩o(wú)序,無(wú)法用下標(biāo)來(lái)取得想要的值。
③ Set和List對(duì)比: Set:檢索元素效率低下,刪除和插入效率高,插入和刪除不會(huì)引起元素位置改變。 List:和數(shù)組類似,List可以動(dòng)態(tài)增長(zhǎng),查找元素效率高,插入刪除元素效率低,因?yàn)闀?huì)引起其他元素位置改變。