-1

我已经阅读了很多关于这些的内容,但在一个方面仍然很困惑。HashMaps 接受 K,V 对。为什么这是必要的?

例如,我想将“abracadabra”添加到 HashMap myMap。

它不会使用 String.hashCode() 函数作为键,然后使用“abracadabra”作为值吗?

然后,如果我试图查找“abracadabra”是否存在,它将检查该 hashCode 的“桶”是否为非空,如果是则遍历该“桶”中的所有内容(最坏的情况是 O(n).. .但不是在现实中)。所以我要说的是对象 .hashCode() 函数不是键,对象是哈希码吗?为什么需要声明一个显式的 Key?

拥有K,V对的目的是什么?我已经多次向我解释了这一点,并阅读了多篇文章/示例/等。我仍然无法通过我厚厚的头骨。

4

4 回答 4

0

AhashCode本身不足以查找值:不同的键可以具有相同的hashCode. 拥有 a 的hashCode目的只是为了快速缩小哈希表将包含该键该值的条目的位置。

于 2013-03-16T23:29:13.460 回答
0

哈希图是从键(在您的情况下abracadabra)到对象的映射。如果您从其他地方获取密钥,例如标识用户的 id,并且您需要为该用户加载附加数据,这将非常有用。

你所描述的听起来更像是一个HashSet

于 2013-03-16T22:33:39.970 回答
0

您正在寻找一个错误的对象:HashMaps 不适合存储单个对象(例如字符串“abracadabra”),它们确实适合存储键值对,其中两个部分都很重要 - 一个简单的例子是属性存储:属性名是键,属性值是值。

如果您真的只想存储一个对象,请查看其他结构。我想到了 HashSet。

于 2013-03-16T22:34:40.167 回答
0

如果我说对了,您希望 HashSet 的功能由 HashMap 完成。查看 HashSet 文档,这可能就是您要搜索的内容。

HashMaps 的工作方式不同,给您一个提示:您可以使用不同的键存储相同的字符串(具有相等的 hashCode):

String myString = "hallo";
HashMap<String,String> map = new HashMap<String,String>();
map.put("key1", myString);
map.put("key2", myString);
于 2013-03-16T22:37:22.950 回答