List和Set是繼承了Collection接口的,Map沒有繼承或?qū)崿F(xiàn)任何接口。
Map和List的區(qū)別
一個(gè)是存儲單列數(shù)據(jù)的集合,另一個(gè)是存儲鍵和值這樣的雙列數(shù)據(jù)的集合,List 中存儲的數(shù) 據(jù)是有順序,并且允許重復(fù);Map 中存儲的數(shù)據(jù)是沒有順序的,其鍵是不能重復(fù)的,它的 值是可以有重復(fù)的。
List、Map、Set 三個(gè)接口,存取元素時(shí),各有什么特點(diǎn)?
<li>首先,List 與 Set 具有相似性,它們都是單列元素的集合,所以,它們有一個(gè)功共同的父接 口,叫 Collection。Set 里面不允許有重復(fù)的元素,所謂重復(fù),即不能有兩個(gè)相等(注意, 不是僅僅是相同)的對象,即假設(shè) Set 集合中有了一個(gè) A 對象,現(xiàn)在我要向 Set 集合再存 入一個(gè) B 對象,但 B 對象與 A 對象 equals 相等,則 B 對象存儲不進(jìn)去,所以,Set 集合的 add 方法有一個(gè) boolean 的返回值,當(dāng)集合中沒有某個(gè)元素,此時(shí) add 方法可成功加入該 元素時(shí),則返回 true,當(dāng)集合含有與某個(gè)元素 equals 相等的元素時(shí),此時(shí) add 方法無法加 入該元素,返回結(jié)果為 false。Set 取元素時(shí),沒法說取第幾個(gè),只能以 Iterator 接口取得所 有的元素,再逐一遍歷各個(gè)元素。
<li>List 表示有先后順序的集合,注意,不是那種按年齡、按大小、按價(jià)格之類的排序。 當(dāng)我們多次調(diào)用 add(Obj e)方法時(shí),每次加入的對象就像火車站買票有排隊(duì)順序一樣,按先 來后到的順序排序。有時(shí)候,也可以插隊(duì),即調(diào)用 add(int index,Obj e)方法,就可以指定當(dāng) 前對象在集合中的存放位置。一個(gè)對象可以被反復(fù)存儲進(jìn) List 中,每調(diào)用一次 add 方法, 這個(gè)對象就被插入進(jìn)集合中一次,其實(shí),并不是把這個(gè)對象本身存儲進(jìn)了集合中,而是在集 合中用一個(gè)索引變量指向這個(gè)對象,當(dāng)這個(gè)對象被 add 多次時(shí),即相當(dāng)于集合中有多個(gè)索 引指向了這個(gè)對象,List 除了可以以 Iterator 接口取得所有的元素,再逐一遍 歷各個(gè)元素之外,還可以調(diào)用 get(index i)來明確說明取第幾個(gè)。
<li>Map 與 List 和 Set 不同,它是雙列的集合,其中有 put 方法,定義如下:put(obj key,objvalue),每次存儲時(shí),要存儲一對 key/value,不能存儲重復(fù)的 key,這個(gè)重復(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 集合比較兩個(gè)對象是否相等,首先看 hashcode 方法是否相等,然后看 equals 方法是否相等。new 兩個(gè) Student 插入到 HashSet 中,看 HashSet 的 size,實(shí)現(xiàn) hashcode 和 equals 方法后再看 size。所以同一個(gè)對象可以在 Vector 中加入多次。往集合里面加元素,相當(dāng)于集合里用一根繩子連接 到了目標(biāo)對象。往 HashSet 中卻加不了多次的。