JDK1 8的hash函式與桶位置的計算

2021-10-23 23:23:14 字數 789 閱讀 8245

所需知識:位操作

<< : 左移運算子,num << 1,相當於num乘以2  低位補0

>> : 右移運算子,num >> 1,相當於num除以2 正數高位補0,負數高位補1

>>> : 無符號右移,忽略符號位,空位都以0補齊

% : 模運算 取餘

^ : 位異或 第乙個運算元的的第n位於第二個運算元的第n位相反,那麼結果的第n為也為1,否則為0

& : 與運算 第乙個運算元的的第n位於第二個運算元的第n位如果都是1,那麼結果的第n為也為1,否則為0

| : 或運算 第乙個運算元的的第n位於第二個運算元的第n位 只要有乙個是1,那麼結果的第n為也為1,否則為0

~ : 非運算 運算元的第n位為1,那麼結果的第n位為0,反之,也就是取反運算(一元操作符:只操作乙個數)

static final int hash(object key)
first = tab[(n - 1) & hash])  //n為陣列長度,first就是桶位置的第乙個節點

等價於取模

(n - 1) & hash <=> hash % n ,當n為2的冪時成立,而hashmap的陣列長度總是2的冪次方,總成立

get方法原始碼

final nodegetnode(int hash, object key)  while ((e = e.next) != null);}}

return null;

}

JDK1 8 函式式介面

前言 公司專案中大量使用了該新特性,故對此進行學習總結 consumer消費型介面 之所以叫做消費型按照我的理解 消費 邏輯處理 傳入的資料 抽象方法 void accept t t 接收乙個引數進行消費,但無需返回結果。介面.accept x 意思就是將x的引數,帶入到介面裡去執行 預設方法 an...

JDK1 8 函式式介面

介面只有乙個抽象方法,稱之為函式式介面 該介面被 functionalinte ce修飾 functionalinte ce public inte ce comparator 表示式aaa system.out.println thread.currentthread getname 執行緒啟動了...

jdk1 7與jdk1 8的HashMap區別詳解

首先我們來談談hashmap,從字面上來看,hashmap的名字中帶有hash,我們就可以聯想到hashmap的儲存方式可能與hash有關。下面我們來談談hashmap的儲存機制 hashmap是以鍵值對的形式儲存資料的,其底層儲存是以陣列 鍊錶的方式實現的 jdk1.8之後又引入了紅黑樹 首先我們...