SCJP书中与集合有关的逻辑

时间:2015-04-28 07:06:53

标签: java scjp

public class Person {

    private String name;

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

根据上述计划,答案是:

答案:使用Person键从HashMap中查找值的时间取决于地图的大小。

我不知道答案如何如上所述。我认为这是hashcode()方法实现的错误,但唯一的选择如下:

  • 哪种说法属实?
  • 甲。使用Person键从HashMap中查找值的时间取决于 关于地图的大小。
  • B中。从HashMap删除Person键将删除所有映射条目 对于Person类型的所有键。
  • ℃。将第二个Person对象插入HashSet将导致 第一个Person对象,作为副本删除。
  • d。确定Person对象是否包含在a中的时间 HashSet是常量,不依赖于地图的大小。

答案:A

如果有人能够提供一些相同的理解,那将是非常好的,因为我无法在网上找到任何答案

3 个答案:

答案 0 :(得分:1)

HashMap使用哈希码将条目放入存储桶中并等于定位它们。 如果所有条目具有相同的哈希码,那么它们将最终都在同一个桶中。现在,只要您从地图中请求某些内容,哈希映射将遍历同一个存储桶中的所有条目,并在每个条目上调用等于查找您请求的条目。这就是

的原因
  

使用Person键从HashMap中查找值的时间取决于   地图的大小。

是正确答案

答案 1 :(得分:0)

为了正常查找HashMap中的项目,哈希码用于查找哪个" bucket"该项目被放入。由于存在哈希冲突的可能性(即两个哈希值相同的项目),然后使用.equals()对项目进行比较。

在这种情况下,所有项都有一个哈希冲突(因为它们都有一个420的哈希)。

这意味着它需要对地图中的每个项目进行.equals()检查,因为它们都在同一个存储桶中,这意味着找到该项目需要花费大量工作地图中的项目数。

答案 2 :(得分:0)

它不是一个错误的哈希码,它的哈希函数很差。无论对象是什么,它都试图生成相同的哈希键。

由于我们生成了相同的哈希码,因此会发生冲突。其中一种冲突解决方法是链接。因此,添加到地图中的对象将被链接在一个存储桶中。因此,我们需要遍历链以获得正确的对象,从而得到答案