当前位置:  开发笔记 > 编程语言 > 正文

为什么密钥在Java中是不可变的?

如何解决《为什么密钥在Java中是不可变的?》经验,为你挑选了1个好方法。

对这个相当天真的问题道歉,但我相信我自己的回答是天真的.我认为密钥(在HashTables中)是不可变的,因为我们不希望以某种方式意外地改变密钥,因此混乱了HashTable的排序.这是正确的解释吗?如果是这样,它怎么能更正确?



1> weston..:

HashTable.put密钥被散列期间,它的值基于散列存储在多个桶(键值对列表)之一中,例如:

bucket[key.hashcode() % numberOfBuckets].add(key, value)

如果钥匙的hashcode插入后改变它才能再在错误的桶,你会再无法找到它,并在哈希表会错误地返回null的任何get该键.

除此之外:了解哈希表的内部工作原理有助于您了解hashcode密钥的高质量功能的重要性.由于糟糕的哈希码函数可能导致桶中密钥的分布不良.由于存储桶只是列表,因此会导致大量线性搜索,从而大大降低了哈希表的有效性.例如,这个可怕的哈希码函数将所有内容放在一个桶中,所以它实际上只是一个列表.

public int hashcode { return 42; /*terrible hashcode example, don't use!*/ }

这也是素数出现在良好的哈希码函数中的一个原因,例如:

public int hashcode {
    int hash = field1.hashcode();
    hash = hash*31 + field2.hashcode(); //note the prime 31
    hash = hash*31 + field3.hashcode();
    return hash;
}

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有