深入了解HashMap,讓你面試多乙份自信

2021-10-23 22:32:57 字數 2489 閱讀 1482

hashmap是乙個集合,也是map介面的常用子類,它同時也繼承了abstractmap抽象類,是採用雜湊的方式進行儲存。當然這還不能體現出hashmap的獨特性。但是我告訴你它能操作一對物件,就是說這個集合是兩列的,第一列是key,第二列是value,類似於下面這種情況:

keyvalue

張三123456

這個key就像是資料庫中的主鍵,是唯一標識後面value的列。所以key不可以有重複值。

所以它的建立格式為:

在這裡插入**片

mapmap =

newhashmap();

怎麼樣,在<>裡有兩個資料型別吧,它們分別代表key和value的資料型別。

在很多時候我們在集合裡進行查詢物件都有點令人費解,比如我們在set集合裡,我們把物件放入集合中,而當我們要找這個物件時,卻需要先提供這個物件,既然我們都有這個物件,還找它幹嘛呢?唯一能解釋得通的原因,就是我們想確定這個集合裡有沒有我們找的物件。

那麼當我們的集合是兩列,我們就可以通過第一列的key值來進行查詢,我們就不需要提供我們要查詢的物件,就可幫解決我們這個問題。

它的查詢只需要提供key值就行了,它的查詢格式為

在這裡插入**片

map.

get(key值)

;

現在我簡單的操作一波。

方法用到了

建立hashmap集合,同時給它們設定資料型別

在這裡插入**片

mapmap =

newhashmap();

新增 方法 ,同時新增key值與value值

在這裡插入**片

map.

put(key,value)

;

查詢方法,根據key值進行查詢value值的內容

在這裡插入**片

解析看這個圖,我們可以得知value值或者key值都可以新增為空的,並且彼此不影響。

因為基於雜湊表的map介面的實現。此實現提供了所有可選的對映操作,並允許null值和null鍵

但是我們的key值不允許重複,如果一旦發生重複,我們就會發生value值覆蓋問題,此時就會獲取新的value值。

還有就是根據指定的 key 找到value,如果沒有找到,則返回 null.

我用到了迭代器,用來遍歷集合。

我們先獲取全部的key。用set集合存放它,因為set集合不允許有重複值,滿足key值不允許重複的要求

獲取方法為

在這裡插入**片

setset = map.

keyset()

;

然後建立迭代器

在這裡插入**片

iterator

iter = set.

iterator()

;

然後進行迴圈遍歷,遍歷條件為iter.hasnext(),這個方法標識如果迭代具有更多元素,則返回 true。而每個元素都是我們的key的值。然後我們根據這個key的值就可以找出我們的value值,這樣就同時遍歷出key與value了。

雜湊是一種資料結構,而我們常見的資料結構有陣列、二叉樹、棧、佇列等等。特別是陣列,我們通常根據下標去查詢它的元素,一下就可查詢出來。

我們的雜湊表也是如此,可以說雜湊表利用了這種特性,它的主幹就是陣列。但是我們知道陣列也有它的缺點,它要插入的時候就極不方便,它一旦要插入乙個數,那它插入的這個位置後面所有的數都得往後移。

那我們的雜湊表呢?它的這種問題叫雜湊衝突,也叫雜湊碰撞,意思就是在進行插入的時候,或新增的時候,發現儲存位置被其他元素占用了。但雜湊表沒有採用像陣列那樣解決的方式,它採用的是鏈位址法,也就是陣列+鍊錶的方式。這個鍊錶就是為了解決雜湊衝突而存在的,如果我們這個雜湊表沒有鍊錶,那麼就和陣列一樣,查詢,新增操作很快,時間複雜度就為o(1),但如果有鍊錶,對於新增操作,它就需要乙個乙個節點去遍歷,那麼時間複雜度就為o(n)。所以,hashmap的鍊錶出現越少,效能

也就越好。

hashmap的例項有兩個影響其效能的引數: 初始容量和負載因子 。

容量是雜湊表中的桶數,初始容量只是建立雜湊表時的容量。

載入因子是在自動增加容量之前允許雜湊表獲取的完整程度的度量。 hashmap預設的載入因子為0.75,初始容量為16。

當雜湊表中的條目數超重載入因子和當前容量的乘積時,就是當條目標數超過16*0.75,也就是超過12時,雜湊表將被重新雜湊(即,重建內部資料結構),以便雜湊表具有大約兩倍的桶數。也就是會擴充套件兩倍初始容量。

深入了解A

一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...

深入了解A

一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...

深入了解Dojo Data

譯自http www.sitepen.com blog 2010 10 13 dive into dojo data 使用dojo data有助於快速建立web應用的介面,且易於嵌入各種資料來源。它在使用者介面與底層資料之間提供了一層抽象層,使得使用者介面開發人員能夠專注於ui的開發,而無需擔心資料...