1. 程式人生 > >List、Map、Set三個接口,存取元素時,各有什麽特點?

List、Map、Set三個接口,存取元素時,各有什麽特點?

大小 rdquo 內部排序 多次調用 不同 別人 存取 排隊 object

這樣的題屬於隨意發揮題:這樣的題比較考水平,兩個方面的水平:一是要真正明白這些內容,二是要有較強的總結和表述能力。如果你明白,但表述不清楚,在別人那裏則等同於不明白。

首先,List與Set具有相似性,它們都是單列元素的集合,所以,它們有一個功共同的父接口,叫Collection。Set裏面不允許有重復的元素,所謂重復,即不能有兩個相等(註意,不是僅僅是相同)的對象,即假設Set集合中有了一個A對象,現在我要向Set集合再存入一個B對象,但B對象與A對象equals相等,則B對象存儲不進去,所以,Set集合的add方法有一個boolean的返回值,當集合中沒有某個元素,此時add方法可成功加入該元素時,則返回true,當集合含有與某個元素equals相等的元素時,此時add方法無法加入該元素,返回結果為false。Set取元素時,沒法說取第幾個,只能以Iterator接口取得所有的元素,再逐一遍歷各個元素。

List表示有先後順序的集合, 註意,不是那種按年齡、按大小、按價格之類的排序。當我們多次調用add(Obj e)方法時,每次加入的對象就像火車站買票有排隊順序一樣,按先來後到的順序排序。有時候,也可以插隊,即調用add(int index,Obj e)方法,就可以指定當前對象在集合中的存放位置。一個對象可以被反復存儲進List中,每調用一次add方法,這個對象就被插入進集合中一次,其實,並不是把這個對象本身存儲進了集合中,而是在集合中用一個索引變量指向這個對象,當這個對象被add多次時,即相當於集合中有多個索引指向了這個對象,如圖x所示。List除了可以以Iterator接口取得所有的元素,再逐一遍歷各個元素之外,還可以調用get(index i)來明確說明取第幾個。

Map與List和Set不同,它是雙列的集合,其中有put方法,定義如下:put(obj key,obj value),每次存儲時,要存儲一對key/value,不能存儲重復的key,這個重復的規則也是按equals比較相等。取則可以根據key獲得相應的value,即get(Object key)返回值為key 所對應的value。另外,也可以獲得所有的key的結合,還可以獲得所有的value的結合,還可以獲得key和value組合成的Map.Entry對象的集合。

List以特定次序來持有元素,可有重復元素。Set 無法擁有重復元素,內部排序。Map 保存key-value值,value可多值。

HashSet按照hashcode值的某種運算方式進行存儲,而不是直接按hashCode值的大小進行存儲。例如,“abc” ---> 78,“def” ---> 62,“xyz” ---> 65在hashSet中的存儲順序不是62,65,78,LinkedHashSet按插入的順序存儲,那被存儲對象的hashcode方法還有什麽作用呢?我們想想!hashset集合比較兩個對象是否相等,首先看hashcode方法是否相等,然後看equals方法是否相等。new 兩個Student插入到HashSet中,看HashSet的size,實現hashcode和equals方法後再看size。

同一個對象可以在Vector中加入多次。往集合裏面加元素,相當於集合裏用一根繩子連接到了目標對象。往HashSet中卻加不了多次的。

List、Map、Set三個接口,存取元素時,各有什麽特點?