Set 注重獨一無二的特性,該體系集合用於存儲無序(存入和取出的順序不一定相同)元素,值不能重複。
對象的相等性本質是對象 hashCode 值(Java 是依據對象的內存地址計算出的次序號)判斷的,如果想要讓兩個不同的對象視爲相等的,就必須覆蓋 Object 的 hashCode 方法和 equals 方法。
話外音:打開 Object.java 源碼,hashCode 長下面這樣。
public native int hashCode();
返回對象的內存地址經過處理後的結構,由於每個對象的內存地址都不一樣,所以哈希碼也不一樣。
它是一個本地方法,Java將調用本地方法庫對此方法的實現。由於Object類中有JNI方法調用,按照JNI的規則,應當生成JNI 的頭文件,在此目錄下執行javah -jni java.lang.Object 指令,將生成一個java_lang_Object.h頭文件,該頭文件是 C++ 實現的。
看一下它們之間的關係:
話外音:圖中關係是 UML 類圖表示。
實線箭頭表示,繼承,從一個非接口類繼承。
虛線箭頭表示,實現實現一個接口。
1.HashSet(Hash 表)
哈希表邊存放的是哈希值。
HashSet 存儲