来自与集合相关的scjp书籍的逻辑

8iwquhpp  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(318)
public class Person {

    private String name;

    public Person(String name) {
        this.name = name;
    }
    public int hashCode() {
        return 420;
    }
}

根据上述程序,答案是:
答:使用person键从hashmap中查找值的时间取决于Map的大小。
我不知道为什么答案是这样的。我认为这是错误的hashcode()方法实现,但唯一的选项如下:
哪种说法是正确的?
答。使用person键从hashmap中查找值的时间取决于Map的大小。
b。从hashmap中删除person键将删除person类型的所有键的所有Map项。
c。将第二个person对象插入hashset将导致第一个person对象作为副本被删除。
d。确定散列集中是否包含person对象的时间是恒定的,并且不取决于Map的大小。
答:a
如果有人能提供一些相同的理解将是伟大的,因为我将无法在网上找到任何答案

t30tvxxf

t30tvxxf1#

hashmap使用hashcode将条目放入bucket中,并等于查找它们。如果所有条目都有相同的hashcode,那么它们都将在同一个bucket中结束。现在,无论何时从Map中请求某些内容,hashmap都会遍历同一个bucket中的所有条目,并对每个条目调用equals来查找您请求的条目。这就是为什么
使用person键从hashmap中查找值的时间取决于Map的大小。
答案正确吗

xkftehaa

xkftehaa2#

为了正常地在hashmap中查找项目,哈希代码用于查找该项目放在哪个“bucket”中。由于散列冲突的可能性(即,散列到相同值的两个项),因此使用 .equals() .
在本例中,所有项都有哈希冲突(因为所有项的哈希值都是420)。
这意味着它将需要做一个 .equals() 检查Map中的每个项目,因为它们都在同一个桶中,这意味着要找到该项目将需要与Map中项目的数量成比例的工作量。

js4nwp54

js4nwp543#

它不是一个错误的哈希代码,它是一个糟糕的哈希函数。不管对象是什么,它都试图生成相同的哈希键。
由于生成的哈希代码相同,因此会发生冲突。其中一个冲突解决技术是链接。所以任何添加到Map上的对象都会被锁在一个桶里。所以我们需要遍历这个链,得到正确的对象,从而得到答案

相关问题