實訓17 2018.04.17
Collection及其部分子類:
List的特點:有索引,有序(按照存入順序進行輸出),可出現重復元素;
Set的特點:沒有索引,沒有重復元素,不一定有序(HashSet的存儲是無序的,LinkedHashSet的存儲是有序的)。
List有三種遍歷方式:
for(int ),foreach,Iterator;
而Set沒有第一種,因為它沒有索引。
Set:
對於Set作些說明:
Set的實現類HashSet使用到hashcode()方法。
hashcode()方法:
Object中的hashcode()方法:
用native修飾,沒有給出實現的具體代碼。
String中的hashcode()方法:
在代碼中,hash的初始值為0,value是傳入的字符串的字符數組(private final char value[])表示,例如"abc"存入value[]中,那麽value[0]=‘a‘,value[1]=‘b‘,value[2]=‘c‘。經過判斷之後,令val[]=value[],進行循環:h=31*0+97=97,(其中,97是‘a‘的ASCII值);h=31*97+98=3105,(其中,98是‘b‘的ASCII值);h=31*3105+99=96354。這就是“abc”的hashcode()得到的值。
結果如下:
HashSet使用數組加鏈表的存儲結果。當使用HashSet存儲時,初始設置數組長度為16。對第一個元素“a”進行添加時,計算“a”的hashcode()值為97,97mod16=1。數組的第一個位置下面鏈接的鏈表中沒有“a”這個值,所以把這個值鏈接在第1個元素下面。
實訓17 2018.04.17