Java集合總結:
概述:儘管已經將java核心程式設計中的集合看了好幾遍了,但是還是感覺心裡沒有低;所以今天特別將集合這塊常見的面試題進行總結,一邊加深自己對java集合的理解;
<1>:談談你對HashMap具體實現的理解:
首先,hashMap是一個鍵值對型別的集合,他的鍵和值都可以為null;
使用hashMap儲存資料時,首先我們鍵會先呼叫它的hashCode方法生成一個hashCode值,然後對這個的hashCode值再進一次移位的運算;
//java中的抖動函式
static final int hash(Object Key){
int h;
if(key== null){
return null
}else{
return key==null ? 0:((h=h.hashCode) ^ h>>>16)
}
}
當然這樣得到的hash值是不能直接作為陣列的索引儲存的;太大的;改進後的hashMap初始容量才是16;所以我們還需要對這個得到的值進行一次模運算:
static int indexFor(int hash, int length) {
return hash & (length-1);
}
得到的結果便是我們想要儲存的bucket的位置;此時如果籃子中沒有值,我們直接將值放進這個bucket中鍵即可;如果有值即產生了我們所謂的hash衝突了;
雜湊表要解決的一個問題就是雜湊值的衝突問題,通常是兩種方法:連結串列法和開放地址法。
連結串列法就是將相同hash值的物件組織成一個連結串列放在hash值對應的槽位;
開放地址法是通過一個探測演算法,當某個槽位已經被佔據的情況下繼續查詢下一個可以使用的槽位。java.util.HashMap採用的連結串列法的方式,連結串列是單向連結串列。形成單連結串列的核心程式碼如下:
void addEntry(int hash, K key, V value, int bucketIndex) {
if ((size >= threshold) && (null != table[bucketIndex])) {
resize(2 * table.length);
hash = (null != key) ? hash(key) : 0;
bucketIndex = indexFor(hash, table.length);
}
createEntry(hash, key, value, bucketIndex);
}
void createEntry(int hash, K key, V value, int bucketIndex) {
Entry<K,V> e = table[bucketIndex];
table[bucketIndex] = new Entry<>(hash, key, value, e);
size++;
}
相關文章
- 常用Java集合類總結Java
- java集合物件排序總結Java物件排序
- Java集合學習總結Java
- Java Collection、Map集合總結Java
- Java集合 - 集合知識點總結概述Java
- Java集合(5)之 List 總結Java
- Java集合類學習總結Java
- java集合框架基礎總結Java框架
- java集合面試重點總結Java面試
- Java集合框架使用總結薦Java框架
- Java基礎集合簡單總結Java
- 總結的Java知識點集合Java
- 0、Java集合體繫結構—最全總結Java
- 集合框架-集合總結框架
- 集合總結
- java基礎使用的集合大總結Java
- 集合框架-Collection集合總結框架
- java之集合框架總結-畢業生必看Java框架
- Java集合體系總結 Set、List、Map、QueueJava
- Java中集合與陣列互轉總結Java陣列
- Java集合和陣列的排序方式總結Java陣列排序
- Java集合類操作優化經驗總結Java優化
- Java集合類常見面試知識點總結Java面試
- Java集合類操作最佳化經驗總結Java
- 集合資料結構總結資料結構
- Python集合操作總結Python
- Scala集合學習總結
- 【Java集合系列】---總體框架Java框架
- Java集合系列-總體框架Java框架
- java集合遍歷的幾種方式總結及比較Java
- C#常用集合總結-2C#
- Java集合:整體結構Java
- Java 集合框架體系總覽Java框架
- 超詳細的Java面試題總結(三)之Java集合篇常見問題Java面試題
- Java 集合(1)之 總體架構Java架構
- JAVA 總結Java
- java總結Java
- Java集合總結【面試題+腦圖】,將知識點一網打盡!Java面試題