雜湊演算法提高從集合中查詢元素的效率,這種方式將集合分成若干個儲存區域,每個物件可以計算出乙個雜湊碼,可以將雜湊碼分組,每組分別對應某個儲存區域,根據乙個物件的雜湊碼就可以確定該物件應該儲存在哪個區域。
hashset類是採用雜湊演算法訪問物件的集合。它內部採用對某個數字取餘的方式對雜湊碼進行分組和劃分物件的儲存空間。當從hashset集合中查詢某個物件時,首先呼叫物件的hashcode()方法獲取該物件的雜湊碼,再根據雜湊碼找到相應的儲存區域,最後取出該儲存區域內的每個元素與該物件進行equals方法比較。
儲存物件在hashset(雜湊集合)中時,hashcode值才有意義。
collection collection = new hashset();
reflectpoint pt1 = new reflectpoint(3,3);
reflectpoint pt2 = new reflectpoint(5,5);
reflectpoint pt3 = new reflectpoint(3,3);
collection.add(pt1);
collection.add(pt2);
collection.add(pt3);
collection.add(pt1);
pt1.y = 7;
//修改了y的值時,同時修改了hashcode值,則刪除原先的y=3的pt1時,就無法刪除,因為兩者的雜湊碼值不同。(實際沒有刪除pt1,這會造成記憶體洩露)
collection.remove(pt1);
system.out.println(collection.size());
hash表及HashCode方法解析
hash是乙個函式,通過一系列的演算法來得到乙個hash值,hash表中的位址值。hash表就是所有的hash值組成的,有很多種hash函式,也就代表著有很多種演算法得到hash值,如上面截圖的三種。hash函式就是根據key計算出應該儲存位址的位置,而雜湊表是基於雜湊函式建立的一種查詢表。也叫雜湊...
Hash碼概念,預設hashCode 方法的計算
物件的雜湊值就是乙個普通的十進位制陣列,源於父類object hashcode 原始碼 public native int hashcode 如果沒有重寫父類,每次執行的結果都是不同整數,稱為雜湊值,沒有特別意義 但是如果子類重寫父類方法,雜湊值就會是自定義的雜湊值 public static vo...
equals方法與和hashcode方法的關係
equals方法與和hashcode方法都來自所有類的超類object類,所以所有的類都會直接或間接的去繼承這兩個方法,足以看出來這兩個方法多麼重要。原始equals方法的作用?去判斷兩個物件是否指向同乙個位址,是否為同乙個引用。當然也有很多類,例如sting類根據自己的需要這個方法,去比較兩個物件...