List和Set是繼承了Collection接口的,Map沒有繼承或?qū)崿F(xiàn)任何接口碍遍。
Map和List的區(qū)別
一個是存儲單列數(shù)據(jù)的集合定铜,另一個是存儲鍵和值這樣的雙列數(shù)據(jù)的集合,List 中存儲的數(shù) 據(jù)是有順序怕敬,并且允許重復(fù);Map 中存儲的數(shù)據(jù)是沒有順序的揣炕,其鍵是不能重復(fù)的,它的 值是可以有重復(fù)的东跪。
List畸陡、Map鹰溜、Set 三個接口,存取元素時丁恭,各有什么特點(diǎn)?
<li>首先曹动,List 與 Set 具有相似性,它們都是單列元素的集合牲览,所以墓陈,它們有一個功共同的父接 口,叫 Collection第献。Set 里面不允許有重復(fù)的元素贡必,所謂重復(fù),即不能有兩個相等(注意痊硕, 不是僅僅是相同)的對象赊级,即假設(shè) Set 集合中有了一個 A 對象,現(xiàn)在我要向 Set 集合再存 入一個 B 對象岔绸,但 B 對象與 A 對象 equals 相等理逊,則 B 對象存儲不進(jìn)去,所以盒揉,Set 集合的 add 方法有一個 boolean 的返回值晋被,當(dāng)集合中沒有某個元素,此時 add 方法可成功加入該 元素時刚盈,則返回 true羡洛,當(dāng)集合含有與某個元素 equals 相等的元素時,此時 add 方法無法加 入該元素藕漱,返回結(jié)果為 false欲侮。Set 取元素時,沒法說取第幾個肋联,只能以 Iterator 接口取得所 有的元素威蕉,再逐一遍歷各個元素。
<li>List 表示有先后順序的集合橄仍,注意韧涨,不是那種按年齡、按大小侮繁、按價格之類的排序虑粥。 當(dāng)我們多次調(diào)用 add(Obj e)方法時,每次加入的對象就像火車站買票有排隊(duì)順序一樣宪哩,按先 來后到的順序排序娩贷。有時候,也可以插隊(duì)锁孟,即調(diào)用 add(int index,Obj e)方法育勺,就可以指定當(dāng) 前對象在集合中的存放位置但荤。一個對象可以被反復(fù)存儲進(jìn) List 中罗岖,每調(diào)用一次 add 方法涧至, 這個對象就被插入進(jìn)集合中一次,其實(shí)桑包,并不是把這個對象本身存儲進(jìn)了集合中南蓬,而是在集 合中用一個索引變量指向這個對象,當(dāng)這個對象被 add 多次時哑了,即相當(dāng)于集合中有多個索 引指向了這個對象赘方,List 除了可以以 Iterator 接口取得所有的元素,再逐一遍 歷各個元素之外弱左,還可以調(diào)用 get(index i)來明確說明取第幾個窄陡。
<li>Map 與 List 和 Set 不同,它是雙列的集合拆火,其中有 put 方法跳夭,定義如下:put(obj key,objvalue),每次存儲時们镜,要存儲一對 key/value币叹,不能存儲重復(fù)的 key,這個重復(fù)的規(guī) 則也是按 equals 比較相等模狭【备В可以根據(jù) key 獲得相應(yīng)的 value,即 get(Object key)返回 值為 key 所對應(yīng)的 value嚼鹉。另外贩汉,也可以獲得所有的 key 的集合,還可以獲得所有的 value 的結(jié)合锚赤,還可以獲得 key 和 value 組合成的 Map.Entry 對象的集合匹舞。
<li>List 以特定次序來持有元素,可有重復(fù)元素宴树。Set 無法擁有重復(fù)元素,內(nèi)部排序策菜。Map 保存 key-value 值,value 可多值酒贬。
HashSet 按照 hashcode 值的某種運(yùn)算方式進(jìn)行存儲又憨,而不是直接按 hashCode 值的大小進(jìn) 行存儲。例如锭吨,"abc"---> 78蠢莺,"def" ---> 62,"xyz" ---> 65在 hashSet 中的存儲順序不是 62,65,78零如,LinkedHashSet 按插入的順序存儲躏将,那被存儲對象 的 hashcode 方法還有什么作用呢?hashset 集合比較兩個對象是否相等锄弱,首先看 hashcode 方法是否相等,然后看 equals 方法是否相等祸憋。new 兩個 Student 插入到 HashSet 中会宪,看 HashSet 的 size,實(shí)現(xiàn) hashcode 和 equals 方法后再看 size蚯窥。所以同一個對象可以在 Vector 中加入多次掸鹅。往集合里面加元素,相當(dāng)于集合里用一根繩子連接 到了目標(biāo)對象拦赠。往 HashSet 中卻加不了多次的巍沙。