Java 修改其中一个HashMap键

Java 修改其中一个HashMap键,java,dictionary,hashmap,Java,Dictionary,Hashmap,玉兰后州 **Dog key 三叶草之后的状态 null null **null size:1 亚瑟之后的国家 Dog key Dog key size:1 为什么第一套指纹无法获取含有三叶草和木兰花内容的狗对象 但在其他两组中,它是否如预期的那样 ie为什么在尝试更改为“magnolia”后,下一个get()(仍然使用正确的对象ie get(new Dog(“clover”))无法获取值“Dog key”?在变为相等之后。。仍然相同的输出- //忽略您需要了解HashMap是如

玉兰后州

**Dog key
三叶草之后的状态

null

null

**null

size:1
亚瑟之后的国家

Dog key

Dog key

size:1
为什么第一套指纹无法获取含有三叶草和木兰花内容的狗对象 但在其他两组中,它是否如预期的那样

ie为什么在尝试更改为“magnolia”后,下一个get()(仍然使用正确的对象ie get(new Dog(“clover”))无法获取值“Dog key”?在变为相等之后。。仍然相同的输出-


//忽略

您需要了解HashMap是如何工作的

当您将一个键放入包含N个bucket的HashMap中时,该键的hashCode将用于查找适当的bucket。然后使用equals()将bucket中包含的每个键与添加的键进行比较,以了解该键是否已在映射中

类似地,在获取键的值时,首先使用hashCode()查找适当的bucket,然后将此bucket中的每个键与传递给get()的键的equals()进行比较

您正在做两件在使用HashMaps时永远不应该做的事情:

  • 将密钥存储在地图中后修改密钥。这将修改其哈希代码,并导致在相应的bucket中不搜索密钥。有点像你把所有的红色硬币放在一个红色的抽屉里,然后把其中一把钥匙重新涂成蓝色。显然,如果你接着搜索蓝色的硬币,你会在蓝色的抽屉里搜索,而不是在红色的抽屉里,因为它最初是红色的
  • 使用使多个键具有相同值的算法实现hashCode()。这是“clover”和“arthur”的情况,它们具有相同的长度,因此在给定的实现中具有相同的hashCode()。另一方面,“magnolia”没有相同的hashCode()

  • 综上所述,您应该能够理解代码为何以这种方式工作。只要在纸上画出每个操作的结果,你就会明白。

    你需要了解HashMap是如何工作的

    当您将一个键放入包含N个bucket的HashMap中时,该键的hashCode将用于查找适当的bucket。然后使用equals()将bucket中包含的每个键与添加的键进行比较,以了解该键是否已在映射中

    类似地,在获取键的值时,首先使用hashCode()查找适当的bucket,然后将此bucket中的每个键与传递给get()的键的equals()进行比较

    您正在做两件在使用HashMaps时永远不应该做的事情:

  • 将密钥存储在地图中后修改密钥。这将修改其哈希代码,并导致在相应的bucket中不搜索密钥。有点像你把所有的红色硬币放在一个红色的抽屉里,然后把其中一把钥匙重新涂成蓝色。显然,如果你接着搜索蓝色的硬币,你会在蓝色的抽屉里搜索,而不是在红色的抽屉里,因为它最初是红色的
  • 使用使多个键具有相同值的算法实现hashCode()。这是“clover”和“arthur”的情况,它们具有相同的长度,因此在给定的实现中具有相同的hashCode()。另一方面,“magnolia”没有相同的hashCode()

  • 综上所述,您应该能够理解代码为何以这种方式工作。只要在纸上画出每个操作的结果,你就会明白。

    你需要了解HashMap是如何工作的

    当您将一个键放入包含N个bucket的HashMap中时,该键的hashCode将用于查找适当的bucket。然后使用equals()将bucket中包含的每个键与添加的键进行比较,以了解该键是否已在映射中

    类似地,在获取键的值时,首先使用hashCode()查找适当的bucket,然后将此bucket中的每个键与传递给get()的键的equals()进行比较

    您正在做两件在使用HashMaps时永远不应该做的事情:

  • 将密钥存储在地图中后修改密钥。这将修改其哈希代码,并导致在相应的bucket中不搜索密钥。有点像你把所有的红色硬币放在一个红色的抽屉里,然后把其中一把钥匙重新涂成蓝色。显然,如果你接着搜索蓝色的硬币,你会在蓝色的抽屉里搜索,而不是在红色的抽屉里,因为它最初是红色的
  • 使用使多个键具有相同值的算法实现hashCode()。这是“clover”和“arthur”的情况,它们具有相同的长度,因此在给定的实现中具有相同的hashCode()。另一方面,“magnolia”没有相同的hashCode()

  • 综上所述,您应该能够理解代码为何以这种方式工作。只要在纸上画出每个操作的结果,你就会明白。

    你需要了解HashMap是如何工作的

    当您将一个键放入包含N个bucket的HashMap中时,该键的hashCode将用于查找适当的bucket。然后使用equals()将bucket中包含的每个键与添加的键进行比较,以了解该键是否已在映射中

    类似地,在获取键的值时,首先使用hashCode()查找适当的bucket,然后将此bucket中的每个键与传递给get()的键的equals()进行比较

    您正在做两件在使用HashMaps时永远不应该做的事情:

  • 将密钥存储在地图中后修改密钥。这将修改其哈希代码,并导致在相应的bucket中不搜索密钥。有点像你把所有的红色硬币放在一个红色的抽屉里,然后把其中一把钥匙重新涂成蓝色。显然,如果你接着搜索蓝色的硬币,你会在蓝色的抽屉里搜索,而不是在红色的抽屉里,因为它最初是红色的
  • 使用使多个键具有相同值的算法实现hashCode()。这是“三叶草”和“亚瑟”的情况,它们有相同的乐谱
    Dog key
    
    Dog key
    
    size:1
    
    Dog key
    
    Dog key
    
    size:1