2013-03-16 130 views
-1

我已經閱讀了很多關於這些內容的內容,在一方面我還是很困惑。 HashMaps採用K,V對。爲什麼這是必要的?HashMap/HashTable說明

例如,我想將「abracadabra」添加到HashMap myMap中。

它不會使用String.hashCode()函數作爲鍵,然後將「abracadabra」作爲值嗎?

然後,如果我試圖查找是否存在「abracadabra」,它會檢查該hashCode的'bucket'是否非空,如果它是遍歷該'bucket'中的所有內容(最壞O( n)...但實際上不是)。所以我說的是對象.hashCode()函數不是關鍵,對象是哈希碼?爲什麼需要聲明一個明確的密鑰?

有K,V對的目的是什麼?我已經多次向我解釋過,並已閱讀過多篇文章/例子/等。我仍然無法穿過我厚厚的頭骨。

+1

您不能將「abracadabra」添加到您的地圖。您只能添加鍵(** K **)/值(** V **)對。 – jlordo 2013-03-16 22:33:59

+0

是否要構建一些其他數據結構來存儲鍵值對。 – techuser 2013-03-16 22:35:08

回答

0

哈希映射是從鍵(在您的案例abracadabra)到對象的映射。如果您從其他地方獲得密鑰,這很有用,例如標識用戶的標識,並且您需要爲該用戶加載其他數據。

你所描述聽起來更像是一個HashSet

0

您正在尋找一個錯誤的對象:包含HashMap不包換存儲單個對象(例如字符串「胡言亂語」),他們確實彪存儲鍵 - 值對,其中兩個部分都很重要 - 一個簡單的例子是屬性存儲:屬性名稱是鍵,屬性值是值。

如果你想真正存儲一個對象,看看其他結構。哈希集想到。

+0

那麼hashmap基本上是一個容器的哈希集? (在你的榜樣持有的名稱和屬性值) – 2013-03-16 22:37:49

+0

號,一個'HashMap'是鍵/值存儲在那裏你可以找到一個值由它的鍵。在內部,根據密鑰的哈希碼,密鑰/值對存儲在不同的列表中。 – jlordo 2013-03-16 22:39:57

0

如果我正確地理解了你,你希望HashSet的功能可以通過HashMap完成。看一下HashSet文檔,可能這就是你正在尋找的。

包含HashMap的工作不同,給你一個提示:你可以存儲相同的字符串(相等的hashCode)使用不同的密鑰:

String myString = "hallo"; 
HashMap<String,String> map = new HashMap<String,String>(); 
map.put("key1", myString); 
map.put("key2", myString); 
0

一個hashCode本身是不夠的,查找值:不同鑰匙可以有相同的hashCode。有hashCode的一點是迅速縮小,其中的哈希表,對於該鍵該值項的地方。