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