不同键但相同哈希码的java哈希映射行为

时间:2015-06-22 17:10:50

标签: java hash hashmap

与HashMap一样,内部存在用于保存键值对的存储桶。

对于具有相同哈希码的密钥的情况。

例如,“abcdef”和“abcdfG”的哈希码是相同的。

map.put("abcdef", 1);
map.put("abcdfG", 2);

当它们被放入哈希映射时,会创建Entry对象,其中两者都放在同一个桶中,而下一个Entry则指向另一个。

问题是如何表现?当我们做map.get(“abcdef”);它会给1还是2

3 个答案:

答案 0 :(得分:1)

map.get("abcdef")将返回正确的值(1),因为它将使用equals方法将存储桶中的每个键(与键的hashCode匹配)与给定键进行比较,直到它找到完全匹配。

答案 1 :(得分:1)

它将首先使用hashcode()来解析存储桶,然后它将遍历平衡树以获得准确的密钥,然后一旦找到确切的密钥就会获得值

取决于您使用的运行时版本,它将是LinkedList或Balanced tree

http://openjdk.java.net/jeps/180

答案 2 :(得分:1)

内部存储桶仅供java使用,以帮助减少搜索所需的项目数。您可以将所有内容推送到同一个存储桶中(使用不同的密钥)。结果只是你的程序会变慢。