java中的hash演算法
① java中hash是什麼意思
hash就是哈希(函數),你們老師應該說學過數據結構就應該知道,而不是c語言
② java中hashset和hashmap有什麼特點
set是線性結構,set中的值不能重復,hashset是set的hash實現,hashset中值不能重復是用hashmap的key來實現的。
map是鍵值對映射,可以空鍵空值。HashMap是Map介面的hash實現,key的唯一性是通過key值hash值的唯一來確定,value值是則是鏈表結構。
他們的共同點都是hash演算法實現的唯一性,他們都不能持有基本類型,只能持有對象
③ 關於java的哈希值
HASH
是散列表的基礎計算方法,Java
內置了
hash
的支持,java.lang.Object
默認是通過對象在內存的地址計算出來的,所以每個對方都是唯一的
hash,但是當我們創建我們自己的對象類時,我們根據需要和業務邏輯來決定是否提供自己的
hashcode
和
equals
方法。
多個對象的
hash
可能重復,這是正常的,重復的對象在
hash
table
中是分配在同一個槽
(一個可以通過計算直接跳過那個位置的數組)中,會再通過
equals
對比
(在這個槽中的
hash
code
都相同的一個鏈表中逐一
equals
比較
key)
找到那個對象。
所以邏輯上是否相同是通過
equals
來計算的,而且
equals
相同的兩個對象,它們的
hash
也應該相同,如果你不能保證這點,那就說明你的
hashcode
和
equals
方法不是使用相同的演算法。
一個對象是否存在不是通過
hash
code
來判斷的,而是
equals。
a
==
b
的話,a.equals
(b)
肯定成立,但反過來就不一定。因為
a
==
b
比較的是對象的地址,只有同一個對象才能成立,equals
比較的是邏輯角度上的相等性。
看
String
或其它一個
JRE
自帶的類的
hashcode
和
equals
方法是怎麼做到的。
④ java中hashset和hashmap有什麼區別
HashMap*
*HashSet*
HashMap實現了Map介面
HashSet實現了Set介面
HashMap儲存鍵值對
HashSet僅僅存儲對象
使用put()方法將元素放入map中
使用add()方法將元素放入set中
HashMap中使用鍵對象來計算hashcode值
HashSet使用成員對象來計算hashcode值,對於兩個對象來說hashcode可能相同,所以equals()方法用來判斷對象的相等性,如果兩個對象不同的話,那麼返回false
HashMap比較快,因為是使用唯一的鍵來獲取對象
HashSet較HashMap來說比較慢
希望能幫到你
⑤ JAVA中哈希碼具體是什麼
哈希其實只是一個概念,沒有什麼真實的指向。它的目的是保證數據均勻的分布到一定的范圍內。所以不同數據產生相同的哈希碼是完全可以的。
java中哈希一般是希望自己寫演算法的。隨便返回什麼都可以。如果什麼也不寫的話就會返回地址。如果自己寫,最簡單的做法是把所有欄位拼起一個長串做個hash值。
⑥ java 1.哈希演算法的實現:
public class Test { /*創建類*/
public static void main(String[] args) {
System.out.println(dg(100));
}
static int dg(int i) { /*定義變數 */
int sum;
if (i == 1) /*假設條件*/
return 1;
else
sum = i + dg(i - 1); /*1~100的和的表達式*/
return sum; /*返回結果*/
}
}
這個腳本語言為 Internet 應用而生,它可以看作是 Haskell 和 Java 的結合。
⑦ java中哪些地方實現了一致性hash演算法
關於一致性Hash演算法,在我之前的博文中已經有多次提到了,MemCache超詳細解讀一文中"一致性Hash演算法"部分,對於為什麼要使用一致性Hash演算法、一致性Hash演算法的演算法原理做了詳細的解讀。
演算法的具體原理這里再次貼上:
先構造一個長度為232的整數環(這個環被稱為一致性Hash環),根據節點名稱的Hash值(其分布為[0, 232-1])將伺服器節點放置在這個Hash環上,然後根據數據的Key值計算得到其Hash值(其分布也為[0, 232-1]),接著在Hash環上順時針查找距離這個Key值的Hash值最近的伺服器節點,完成Key到伺服器的映射查找。
這種演算法解決了普通余數Hash演算法伸縮性差的問題,可以保證在上線、下線伺服器的情況下盡量有多的請求命中原來路由到的伺服器。
當然,萬事不可能十全十美,一致性Hash演算法比普通的余數Hash演算法更具有伸縮性,但是同時其演算法實現也更為復雜,本文就來研究一下,如何利用Java代碼實現一致性Hash演算法。在開始之前,先對一致性Hash演算法中的幾個核心問題進行一些探究。