Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 打印hashmap冲突_Java_Hashmap - Fatal编程技术网

Java 打印hashmap冲突

Java 打印hashmap冲突,java,hashmap,Java,Hashmap,我是否可以打印出具有冲突值的键?如果一个键有两个值,我希望能够打印出这些值,我如何才能做到这一点我在hash-map类中并对其进行修改 如果一个键有两个值 在HashMap中,一个键不能有两个值。如果使用现有的键调用map.put(key,value),则旧值将从映射中删除,并由put()返回 每个键有多个值的一种方法是使用HashMap。这会自动提供所需的功能,因为在向值集合添加新元素后,您可以简单地检查它的内容 还有提供此功能的第三方类,例如 编辑: 如果说多个键在同一个存储桶中结束,则需要

我是否可以打印出具有冲突值的键?如果一个键有两个值,我希望能够打印出这些值,我如何才能做到这一点我在hash-map类中并对其进行修改

如果一个键有两个值

HashMap
中,一个键不能有两个值。如果使用现有的
键调用
map.put(key,value)
,则旧值将从映射中删除,并由
put()
返回

每个键有多个值的一种方法是使用
HashMap
。这会自动提供所需的功能,因为在向值集合添加新元素后,您可以简单地检查它的内容

还有提供此功能的第三方类,例如

编辑:

如果说多个键在同一个存储桶中结束,则需要修改
HashMap
put()
方法:

public V put(K key, V value) {
    if (key == null)
        return putForNullKey(value);
    int hash = hash(key.hashCode());
    int i = indexFor(hash, table.length);
    if (table[i] != null) {
        // TODO: there's already something in this bucket
    }
    for (Entry<K,V> e = table[i]; e != null; e = e.next) {
        ...
public V put(K键,V值){
if(key==null)
返回putForNullKey(值);
int hash=hash(key.hashCode());
int i=indexFor(散列,table.length);
如果(表[i]!=null){
//托多:这个桶里已经有东西了
}
for(条目e=表[i];e!=null;e=e.next){
...
(将代码添加到
TODO
行所在的位置。)

您需要对
putForNullKey()
和其他相关方法进行类似的更改,例如
putForCreate()

如果一个键有两个值

HashMap
中,一个键不能有两个值。如果使用现有
键调用
map.put(key,value)
,旧值将从映射中删除,并由
put()
返回

每个键有多个值的一种方法是使用
HashMap
。这会自动提供所需的功能,因为在向值集合添加新元素后,您只需检查值集合的内容即可

还有提供此功能的第三方类,例如

编辑:

如果说多个键在同一个存储桶中结束,则需要修改
HashMap
put()
方法:

public V put(K key, V value) {
    if (key == null)
        return putForNullKey(value);
    int hash = hash(key.hashCode());
    int i = indexFor(hash, table.length);
    if (table[i] != null) {
        // TODO: there's already something in this bucket
    }
    for (Entry<K,V> e = table[i]; e != null; e = e.next) {
        ...
public V put(K键,V值){
if(key==null)
返回putForNullKey(值);
int hash=hash(key.hashCode());
int i=indexFor(散列,table.length);
如果(表[i]!=null){
//托多:这个桶里已经有东西了
}
for(条目e=表[i];e!=null;e=e.next){
...
(将代码添加到
TODO
行所在的位置。)


您需要对
putForNullKey()
和其他相关方法进行类似的更改,例如
putForCreate()

如果您正在修改HashMap类,那么您应该能够找到元素列表从哈希数组链接的位置,并检测链中何时有多个元素


但是,您最好有一个很好的理由来修改HashMap,并且最好更改类的包和名称(改为类似com.my.company.HashMapWithCollisionStatistics的内容)或者冒着你身后的每个人的愤怒在你的团队中维护Java代码的风险。

如果你正在修改HashMap类,那么你应该能够找到元素列表从哈希数组链接到哪里,并检测链中何时有多个元素


但是,您最好有一个很好的理由来修改HashMap,并且最好更改类的包和名称(改为类似com.my.company.HashMapWithCollisionStatistics的内容)或者冒着你身后的每个人的愤怒在你的团队中维护Java代码。

只需使用google collections中的MultiMap。

只需使用google collections中的MultiMap。

为什么需要这样做?如果只是想检查冲突,请调用hashcode()在您试图存储在hashmap中而不存储它们的对象上。

为什么需要这样做?如果只是想检查冲突,那么在您试图存储在hashmap中而不存储它们的对象上调用hashcode()。

哈哈。是的,我这样做了。“发生了什么就发生了。”我不希望有人对我这样做。哈哈。是的,我做到了。“什么发生了,什么发生了”不会希望有人对我这样做。(我想你说的是散列冲突和散列冲突的值,而不是像{key,value}对那样的“值”,对吗?)…如果由于任何原因导致冲突过多,则可能是由于选择不当的hashCode方法造成的:如果有不同的非equals对象返回相同的哈希(这是错误的,但不是禁止的),则可能会降低映射的性能。与其修改各种映射实现的代码,不如为容易发生哈希冲突的非equals对象编写更好的hashCode方法…@user988052我同意,即使我在下面回答,只要调用hashCode,看看hashCode有什么问题。。。(我想你说的是散列冲突和散列冲突的值,而不是{key,value}对中的“value”,对吗?)…如果出于任何原因,冲突太多,可能是由于选择不当的散列代码方法:如果有不同的非equals对象返回相同的散列(不好,但不是禁止的),则可能会降低映射的性能。与其修改各种映射实现的代码,不如为容易发生哈希冲突的非equals对象编写更好的hashCode方法…@user988052我同意,即使我在下面回答,只要调用hashCode,看看hashCode有什么问题。。。