具有不同哈希值的键是否也映射到 HashMap 中的相同索引?

Do keys with different hashes also get mapped to the same index in HashMap?(具有不同哈希值的键是否也映射到 HashMap 中的相同索引?)
本文介绍了具有不同哈希值的键是否也映射到 HashMap 中的相同索引?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

查看代码,特别是第 393 行,看起来不同的哈希值已映射到同一个索引.我的理解是哈希码用于确定要使用 HashMap 中的哪个桶,并且桶由具有相同哈希码的所有条目的链表组成.他们为什么要检查 e.hash == hash ?

Looking at the code specifically line 393, it looks like different hashes have been mapped to same index. I had an understanding that the hashcode is used to determine what bucket in a HashMap is to be used, and the bucket is made up of a linked list of all the entries with the same hashcode. They why have the e.hash == hash check ?



    public V put(K key, V value) {
        if (key == null)
            return putForNullKey(value);
        int hash = hash(key.hashCode());
        int i = indexFor(hash, table.length);
        for (Entry e = table[i]; e != null; e = e.next) {
            Object k;
            if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
                V oldValue = e.value;
                e.value = value;
                e.recordAccess(this);
                return oldValue;
            }
        }
        modCount++;
        addEntry(hash, key, value, i);
        return null;
    }

推荐答案

由于 hashcode 可以是 2^32 值中的一个,hashmap 很少有这么多桶(仅表需要 16GB 内存).所以是的,您可以在地图的相同存储桶中拥有具有不同哈希值的对象(AFAIK 它是 hachCode % numberOfBuckets 的简单模运算).

Since a hashcode can be one in 2^32 values, it is rare that the hashmap has so many buckets (just the table would require 16GB of memory). So yes, you can have objects with different hashes in the same buckets of the maps (AFAIK it is a simple modulus operation of hachCode % numberOfBuckets).

注意代码不是直接使用key.hashCode(),而是hash(key.hashCode()).

Note that the code does not use directly key.hashCode(), but hash(key.hashCode()).

这篇关于具有不同哈希值的键是否也映射到 HashMap 中的相同索引?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Show progress during FTP file upload in a java applet(在 Java 小程序中显示 FTP 文件上传期间的进度)
How to copy a file on the FTP server to a directory on the same server in Java?(java - 如何将FTP服务器上的文件复制到Java中同一服务器上的目录?)
FTP zip upload is corrupted sometimes(FTP zip 上传有时会损坏)
Enable logging in Apache Commons Net for FTP protocol(在 Apache Commons Net 中为 FTP 协议启用日志记录)
Checking file existence on FTP server(检查 FTP 服务器上的文件是否存在)
FtpClient storeFile always return False(FtpClient storeFile 总是返回 False)