1. 程式人生 > >java中HashMap詳解

java中HashMap詳解




上面方法的程式碼很簡單,但其中包含了一個非常優雅的設計:系統總是將新新增的 Entry 物件放入 table 陣列的 bucketIndex 索引處——如果 bucketIndex 索引處已經有了一個 Entry 物件,那新新增的 Entry 物件指向原有的 Entry 物件(產生一個 Entry 鏈),如果 bucketIndex 索引處沒有 Entry 物件,也就是上面程式①號程式碼的 e 變數是 null,也就是新放入的 Entry 物件指向 null,也就是沒有產生 Entry 鏈。 

JDK 原始碼

在 JDK 安裝目錄下可以找到一個 src.zip 壓縮檔案,該檔案裡包含了 Java 基礎類庫的所有原始檔。只要讀者有學習興趣,隨時可以開啟這份壓縮檔案來閱讀 Java 類庫的原始碼,這對提高讀者的程式設計能力是非常有幫助的。需要指出的是:src.zip 中包含的原始碼並沒有包含像上文中的中文註釋,這些註釋是筆者自己新增進去的。 


Hash 演算法的效能選項 

根據上面程式碼可以看出,在同一個 bucket 儲存 Entry 鏈的情況下,新放入的 Entry 總是位於 bucket 中,而最早放入該 bucket 中的 Entry 則位於這個 Entry 鏈的最末端。 

上面程式中還有這樣兩個變數: 

    * size:該變數儲存了該 HashMap 中所包含的 key-value 對的數量。 
    * threshold:該變數包含了 HashMap 能容納的 key-value 對的極限,它的值等於 HashMap 的容量乘以負載因子(load factor)。 

從上面程式中②號程式碼可以看出,當 size++ >= threshold 時,HashMap 會自動呼叫 resize 方法擴充 HashMap 的容量。每擴充一次,HashMap 的容量就增大一倍。 


上面程式中使用的 table 其實就是一個普通陣列,每個陣列都有一個固定的長度,這個陣列的長度就是 HashMap 的容量。HashMap 包含如下幾個構造器: 

    * HashMap():構建一個初始容量為 16,負載因子為 0.75 的 HashMap。 
    * HashMap(int initialCapacity):構建一個初始容量為 initialCapacity,負載因子為 0.75 的 HashMap。 
    * HashMap(int initialCapacity, float loadFactor):以指定初始容量、指定的負載因子建立一個 HashMap。 

當建立一個 HashMap 時,系統會自動建立一個 table 陣列來儲存 HashMap 中的 Entry,下面是 HashMap 中一個構造器的程式碼: 


相關推薦

javaHashMap

上面方法的程式碼很簡單,但其中包含了一個非常優雅的設計:系統總是將新新增的 Entry 物件放入 table 陣列的 bucketIndex 索引處——如果 bucketIndex 索引處已經有了一個 Entry 物件,那新新增的 Entry 物件指向原有的 Entry 物件(產生一個 Entry 鏈),如果

javastatic

static關鍵字 1.static修飾的變數叫做“靜態變數”。 2.static修飾的方法叫做“靜態方法”。 3.static還可以定義靜態語句塊。 一下例子演示:static定義靜態語句塊 static定義的靜態語句塊在類載入的階段執行,並且只執行一次,並且是自上而下的順序執行。 p

javaimport

前言 import與package機制相關,這裡先從package入手,再講述import以及static import的作用。 package package名稱就像是我們的姓,而class名稱就像是我們的名字 。package和package的附屬關係用”.”來連線,這就像是複姓。比如說 java.

JavahashMap

原 Java集合:HashMap詳解(JDK 1.8) 置頂 2018年01月07日 18:00:41 JoonWhee

javavolatile

1.1 作用:它用來確保將變數的更新操作通知到其他執行緒。 volatile可以保證執行緒可見性且提供了一定的有序性,但是無法保證原子性。 1.保證可見性、不保證原子性 2.禁止指令重排序 可見性的實現: (1)修改volatile變數時會強制將修改後的值重新整

JavaCAS

在JDK 5之前Java語言是靠synchronized關鍵字保證同步的,這會導致有鎖 鎖機制存在以下問題: (1)在多執行緒競爭下,加鎖、釋放鎖會導致比較多的上下文切換和排程延時,引起效能問題。 (2)一個執行緒持有鎖會導致其它所有需要此鎖的執行緒掛起。 (3

JavaCAS(悲觀鎖與樂觀鎖)

前言:在JDK1.5之前Java語言是靠synchronized關鍵字保證同步的,這會導致有鎖鎖機制存在以下問題: (1)在多執行緒競爭下,加鎖、釋放鎖會導致比較多的上下文切換和排程延時,引起效能問題。 (2)一個執行緒持有鎖會導致其它所有需要此鎖的執行緒掛

中科院中文分詞在java呼叫(ICTCLAS2013版)

在中文分詞的時候,現在流行的有很多,下面主要介紹中科院中文分詞,現在中科院地址是http://ictclas.nlpir.org/ 首先也是開始呼叫這個介面,呼叫成功後覺得應該共享出來,讓更多人去使用。 然後主要是介紹一下怎麼用使用漢語分詞系統怎麼去呼叫。必須先在上面那個網

Java基礎之五】JavaIO

1.Java IO簡介 可能學過計算機組裝與維修的同學都知道I/O裝置,翻譯過來也就是Input/Output(輸入輸出裝置),在硬體中鍵盤、滑鼠 屬於 輸入裝置,顯示器、印表機等屬於輸出裝置,這裡輸入輸出參考物是計算機本身。 java.io包從巨集觀上來

JavaCAS,分析的通俗易懂

在JDK 5之前Java語言是靠synchronized關鍵字保證同步的,這會導致有鎖 鎖機制存在以下問題: (1)在多執行緒競爭下,加鎖、釋放鎖會導致比較多的上下文切換和排程延時,引起效能問題。 (2)一個執行緒持有鎖會導致其它所有需要此鎖的執行緒掛起。 (3)如果

Javainstanceof

java 中的instanceof 運算子是用來在執行時指出物件是否是特定類的一個例項。instanceof通過返回一個布林值來指出,這個物件是否是這個特定類或者是它的子類的一個例項。 用法: result = obj

JAVA異常

image scanner 執行c 地方 nbsp point 情況 ktr == Throwable類:是Java中所有錯誤和異常的父類 Throwable類有兩個子類:一個是錯誤類 Error 一個是異常類 Exception 錯誤是指:類似虛擬機斷電,電

java每次面試的問題整理,java篇()

Java集合框架是什麼,集合框架優點! 最初的java版本包含幾個集合類,Vector,Stack,HashTable,和Array. Java1.2提出了囊括所有集合的介面,實現和演算法的集合框架。集合框架的部分優點↓ 1,實現核心集合類降低開發成本.並非實現我們自己的集合類,

java程式設計思想讀書筆記三(HashMap

Map Map介面規定了一系列的操作,作為一個總規範它所定義的方法也是最基礎,最通用的。 AbstractMap AbstractMap是HashMap、TreeMap,、ConcurrentHashMap 等類的父類。當我們巨集觀去理解Map時會發現,其實Map就是一

Java集合(四)HashMap

HashMap簡介 java.lang.Object ↳ java.util.AbstractMap<K, V> ↳ java.util.HashMap<K, V> public class HashMap<K,V> ex

Java資料結構(十二)- HashMap

HashMap 基於雜湊表的 Map 介面的實現。此實現提供所有可選的對映操作,並允許使用 null 值和 null 鍵。(除了非同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同。)此類不保證對映的順序,特別是它不保證該順序恆

Java HashMap實現原理2——HashMap

博主的前兩篇文章Java HashMap實現原理0——從hashCode,equals說起,Java HashMap實現原理1——散列表已經講述了HashMap設計的知識點,包括:hashCode(),equals(),散列表結構,雜湊函式、衝突解決等,在散列表

JNI呼叫JAVA各種方法

總結一下 C 如何 通過 JNI 層呼叫 Java 的靜態和非靜態方法 對於:JNIEXPORT void JNICALL Java_com_example_TestNative_sayHello(JNIEnv * env, jobject th

Java面試題】之Object類方法

之前看到有人分享的面經,面試官先問Object中有什麼方法,然後再要求解釋每一次方法的作用。 先看看Object中有什麼方法 Object類是Java中所有類的基類。位於java.lang包中,一共有13個方法 方法一 Object() 即Object的構造方法 大

java.util包(二)——Connection接口

操作 相同 元素 叠代 cat roo soft true nbsp Connection接口介紹   Connection接口是java集合的root接口,沒有實現類,只有子接口和實現子接口的各種容器。主要用來表示java集合這一大的抽象概念。   Connection接