【问题标题】:Hashmap using next variable to point to the next node if there are several nodes with same key如果有多个具有相同键的节点,Hashmap 使用下一个变量指向下一个节点
【发布时间】:2020-09-29 10:57:53
【问题描述】:

我正在尝试在 Java 8 中使用 Hashmap。 我将使用哈希函数来获取索引以放置具有给定键和值的节点。 但是,如果存在具有相同键的节点,我必须使用链表类型的数据结构。这是 我感到困惑的地方。

例如, 如果有

package First;

import java.util.HashMap;

public class MyClass extends Node {
  public MyClass(int k, int v) {
        super(k, v);
        // TODO Auto-generated constructor stub
    }

public static void main(String[] args) {
    HashMap<String, Node> capitalCities = new HashMap<String, Node>();
    capitalCities.put("England", new Node(1,3));
    capitalCities.put("Germany", new Node(1,3));
    capitalCities.put("Norway", new Node(1,3));
    capitalCities.put("USA", new Node(1,3));
    capitalCities.put("USA", new Node(1,3));
    System.out.println(capitalCities); 
  }
}

如果我打印 h1,它将只有 "APPLE", 13 所以我想让Hashmap变成这样: "苹果", 1 -> "苹果", 10 -> "苹果", 13

【问题讨论】:

  • 实际上,您发布的代码会抛出 NullPointerException。您如何尝试打印 h1?
  • 我刚刚发布了一些临时代码现在我编辑并放置了我正在测试的真实代码
  • 您发布的原始代码只会打印一个,因为它们都有相同的密钥。您现在拥有的代码(显然)不会打印“APPLE”,它将打印美国的最后一个元素、挪威元素以及德国和英格兰元素。
  • 我要做的主要事情是插入“USA”、“NY”和“USA”、“DC”(例如)。有没有办法插入具有相同键的对象?
  • 没有。如果添加具有相同键的第二个元素,它会覆盖它。您可以先获取键的现有元素,然后将已经存在的对象与要添加的对象合并,然后将其放入该键

标签: java linked-list hashmap linkedhashmap


【解决方案1】:

字符串类哈希码和相等方法使“APPLE”独一无二。因此,您需要将对象作为键或使用 StringBuilder 而不是 String。如下所示

Map<StringBuilder, Integer> h1 = new HashMap<>();
h1.put(new StringBuilder("APPLE"), 1);
h1.put(new StringBuilder("APPLE"), 10);
h1.put(new StringBuilder("APPLE"), 13);
System.out.println(h1);

【讨论】:

  • 你将如何执行“get”来检索元素?
猜你喜欢
  • 2023-03-29
  • 2013-09-17
  • 2018-05-22
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多