public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public int hashCode() {
return 420;
}
}
根据上述计划,答案是:
答案:使用Person键从HashMap中查找值的时间取决于地图的大小。
我不知道答案如何如上所述。我认为这是hashcode()方法实现的错误,但唯一的选择如下:
答案:A
如果有人能够提供一些相同的理解,那将是非常好的,因为我无法在网上找到任何答案
答案 0 :(得分:1)
HashMap使用哈希码将条目放入存储桶中并等于定位它们。 如果所有条目具有相同的哈希码,那么它们将最终都在同一个桶中。现在,只要您从地图中请求某些内容,哈希映射将遍历同一个存储桶中的所有条目,并在每个条目上调用等于查找您请求的条目。这就是
的原因使用Person键从HashMap中查找值的时间取决于 地图的大小。
是正确答案
答案 1 :(得分:0)
为了正常查找HashMap中的项目,哈希码用于查找哪个" bucket"该项目被放入。由于存在哈希冲突的可能性(即两个哈希值相同的项目),然后使用.equals()
对项目进行比较。
在这种情况下,所有项都有一个哈希冲突(因为它们都有一个420的哈希)。
这意味着它需要对地图中的每个项目进行.equals()
检查,因为它们都在同一个存储桶中,这意味着找到该项目需要花费大量工作地图中的项目数。
答案 2 :(得分:0)
它不是一个错误的哈希码,它的哈希函数很差。无论对象是什么,它都试图生成相同的哈希键。
由于我们生成了相同的哈希码,因此会发生冲突。其中一种冲突解决方法是链接。因此,添加到地图中的对象将被链接在一个存储桶中。因此,我们需要遍历链以获得正确的对象,从而得到答案