2013-03-16 88 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的一点是迅速缩小,其中的哈希表,对于该键该值项的地方。