HashCode的利與弊

2021-09-24 11:32:11 字數 1343 閱讀 4989

hashcode是怎麼來的?

將物件實體地址轉換成乙個整數,然後該整數通過hash函式的演算法就得到了hashcode。

該整數和hashcode是對應的,而物件的實體地址和該整數也是對應的。

所以,物件的實體地址,整數,hashcode是一種對映關係。

查詢效率高!!!

為什麼查詢效率高???

因為採用雜湊表,也就是hash表儲存物件!!!

為什麼使用雜湊表速度快???

雜湊表本質是物件的實體地址,也就是記憶體位址,可以直接定位。(無需進行遍歷等操作)。

至於更加底層的,為什麼通過記憶體位址可直接定位就涉及到作業系統的定址方式了。

hashcode是為了集合而服務的,集合分為list有序可重複集合和set無序不重複集合。set為了保持集合中物件的互斥性,每新增乙個新物件都會呼叫equals與已經存在於set集合中的每個元素進行比較。當元素量達到一定程度時,效率就會變慢。

使用hashcode定址時,set集合會根據物件的hashcode值來尋找對應的區間,然後在區間裡執行equals方法。(粗定位+細定位

兩者的主要用途都是查詢物件。

hashcode()方法通過hash值在hash表中定位查詢。

equals()通過比較返回true或者false

hashcode()效率高,但不完全可靠(不同物件生成的hashcode可能會相同,而相同物件生成的hashcode可能會不同)

equals()效率低,但完全可靠

如果重寫equals(),盡量也重寫hashcode()

物件呼叫equals方法返回true,但兩個物件的hashcode是直接通過記憶體位址計算的,沒有進行比較,所以是有可能不同的。

如果物件通過equals()方法返回true,那麼hashcode值也應該相同。

為什麼??

如果hashcode值不同的話,繼承hashcode的hashset就會將物件儲存在兩個不同的位置,與set集合的物件互斥性不符。

假設1-10儲存到集合中,1對應的value是2222,1是物件的實體地址,2222就是hashcode,1和2222的對應關係就是hash函式。存放2222的地方就是hash表。由於壓縮對映的關係,假設5對應的value也是2222,那麼這種情況就是hash衝突。

hashcode是為了提高查詢效率而存在的,但與此同時也存在hash衝突這樣的問題。

雲計算的利與弊

最近,雲計算這個炙手可熱的技術再次點燃競爭的火花。各大it巨頭紛紛推出自己的雲技術,並在全世界修建推廣自己的雲計算中心.例如 ibm將投資三億美元新建13個資料中心,這樣世界各地的客戶可以利用這種基於雲技術的儲存模式儲存其資料,即使遇到天災人禍也不用擔心資料丟失,可以輕易恢復資料。google將向美...

使用moosefs的利與弊

我在工作中需要把生產環境的使用者訪問日誌儲存到資料處理伺服器,並備份起來。一開始的做法是由人工來均衡資料處理伺服器的空間使用,但是隨著伺服器資料量的增加,人工的管理將變得很困難,一方面是存在單點故障的問題,如果一台資料處理伺服器掛了,上面的資料可能會丟失 另一方面,為了均衡各伺服器間的空間使用,需要...

大資料的利與弊

大資料時代,已經逐漸開始變成一種服務.大資料時代同樣也具有兩面性,對於他的優點。馬雲曾這樣描述大資料時代 在雲計算的技術支援下,資料時代的核心不是分析資料,而是分享資料。資訊時代是基於我比別人聰明的基礎上面的,你收集了很多資料,然後你編好以後給別人,這稱之為資訊,處理過的。資料是相信別人比我聰明,你...