表結構的第一部分,hashmap。
/**
* hashmap是基於map介面的實現類,允許轉殖和序列化操作。
* hashmap是非執行緒安全的,鍵和值都允許為null,但是鍵為null的鍵值對會被放在最前面。
* hashmap不能保證儲存的鍵值對的順序是一直保持不變的。
* hashmap的操作效能與兩個因素有關,桶的大小和負載因子的大小,為了保證效能,請不要負載因子設定的過小,
* 或者在初始化的時候將桶設定的過大。
*/public class hashmapextends abstractmapimplements map, cloneable, serializable
public final k getkey()
public final v getvalue()
public final string tostring()
返回當前node的hash值
public final int hashcode()
public final v setvalue(v newvalue)
// 判斷當前節點與o是否相等,如果o和當前節點不是同乙個物件,必須兩者
// key和value同時相等才算o和當前節點相等
public final boolean equals(object o)
return false;}}
/*** 返回key的hash值
*/static final int hash(object key)
/*** 如果x實現了comparable介面,那麼返回x的類型別,否則返回null
*/static class<?> comparableclassfor(object x) }}
return null;
}/**
* 如果k和x屬於同乙個類的物件,返回k.compareto(x)的結果,否則返回0
*/@suppresswarnings() // for cast to comparable
static int comparecomparables(class<?> kc, object k, object x)
/*** 如果cap為2的冪,那麼返回cap否則返回大於cap的最小的乙個2的冪
*/static final int tablesizefor(int cap)
/*** hashmap初始化後首次使用儲存鍵值對的陣列。
*/transient node table;
/*** 用於存放鍵值對的集合
*/transient set> entryset;
/*** 當前物件包含的鍵值對數量。
*/transient int size;
/*** 這個集合被修改過的次數。
*/transient int modcount;
/*** 下乙個需要調整桶大小的值,當鍵值對數量達到此值時需要進行擴容(容量*負載因子)
*/
int threshold;
/*** 負載因子,非預設
*/final float loadfactor;
/*** 建構函式,需要指定初始化桶大小和負載因子大小
*/public hashmap(int initialcapacity, float loadfactor)
/*** 建構函式,指定初始化桶大小
*/public hashmap(int initialcapacity)
/*** 建構函式,使用預設桶大小和預設負載因子
*/public hashmap()
/*** 使用m的鍵值對構造乙個新的hashmap物件,負載因子為預設負載因子,桶的大小為至少容納下m的鍵值對
*/public hashmap(map<? extends k, ? extends v> m)
/*** 將m中的鍵值對存入當前hashmap物件中
*/final void putmapentries(map<? extends k, ? extends v> m, boolean evict)
else if (s > threshold)
resize(); //如果m的大小大於下次擴容需要增加的空間,重新進行擴容
for (map.entry<? extends k, ? extends v> e : m.entryset()) }}
/*** 返回當前hashmap物件中儲存的鍵值對數量
*/public int size()
/*** 判斷當前hashmap物件是否為空
*/public boolean isempty()
/*** 給定key值,從當前hashmap物件中取出key對應的value值
*/public v get(object key)
/*** 根據給定的hash和key值獲取節點資訊,適用於hash衝突的時候
*/final nodegetnode(int hash, object key) while ((e = e.next) != null);}}
return null;
}
Java原始碼閱讀之Vector
vector與arraylist區別 protected object elementdata protected int elementcount protected int capacityincrement private static final int max array size int...
原始碼閱讀 Glide原始碼閱讀之with方法(一)
前言 本篇基於4.8.0版本 原始碼閱讀 glide原始碼閱讀之with方法 一 原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 大多數情況下,我們使用glide 就一句 但是這一句 裡面蘊含著成噸的 with方法有以下幾個過載方法 publi...
原始碼閱讀 Glide原始碼閱讀之load方法(二)
原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 首先,load方法有以下幾個過載方法 public requestbuilder load nullable bitmap bitmap public requestbuilder load nu...