【问题标题】:Adding to a HashSet when it is the value of a HashMap当它是 HashMap 的值时添加到 HashSet
【发布时间】:2013-10-29 01:56:51
【问题描述】:

我现在正在做我教科书中的“通用类”练习,尝试使用 HashMap 作为底层结构来实现 Graph 数据结构,其中键是 Graph 中的节点,而键的值是与该节点相邻的节点的 HashSet。代码的开头是这样的:

   public class Graph <T> {

       public HashMap<T, HashSet<T>> foo_graph;
       //... Code ...

必须提一下,HashSet 中的键和值都必须是同一类型,这就是 T 占位符的原因。写完我所有的方法后,我正在尝试使用static void main 块进行测试,但是每当我尝试打印 Graph 时,Eclipse 都会不断给我NullPointerExceptions(它已经给了我一个有效的 ToString 方法):

    public static void main(String[] args) {

Graph<Integer> g = new Graph<>();
        g.addNode(5, [5,3,7]); //Trying to add 5,3,7 to the HashSet, but Eclipse is saying I can't do this.
        System.out.println(g); 
    }

顺便说一下,这是我的 addNode 方法,我似乎也无法在 Graph 中添加任何内容。

public void addNode(T node_key, HashSet<T> node_value ) {
            main_graph.put(node_key, node_value);

Eclipse 在我的静态 void 测试块的 addNode 行告诉我:

 The method addNode(Integer, HashSet<Integer>) in the type Graph<Integer> is not applicable for the arguments (int, int, int, int)

有人知道这是为什么吗?我似乎无法让它工作,我很难过。既不创建一个

【问题讨论】:

  • 你们都回答得这么快...这就是我喜欢 StackOverflow 的原因 :)

标签: java graph nullpointerexception hashmap hashset


【解决方案1】:

当然。像您所做的那样将东西放在方括号中的语法并不存在。我发现初始化HashSet 的最简单方法是使用Arrays.asList 静态方法。我会写这样的。

g.addNode(5, new HashSet<Integer>(Arrays.asList(5, 3, 7)));

【讨论】:

  • 我明白了,我明白了。非常感谢,您知道如何将它输入到 HashMap 中后附加到同一个 HashSet 中吗?
  • 是的,我会知道的。如果您查看Set 接口的Javadocs,在docs.oracle.com/javase/7/docs/api/java/util/Set.html,您会发现一些向Set 对象添加内容的方法。
【解决方案2】:

我必须同意 Eclipse。你不能这样做:

g.addNode(5, [5,3,7]);

Java 不知道 [5,3,7] 是如何神奇地变成一个 HashSet。

你可以这样做:

HashSet<Integer> set = new HashSet<>();
set.add(5);
set.add(3);
set.add(7);
g.addNode(5, set);

【讨论】:

  • 我可能会做 Set set = new HashSet(Arrays.asList(5,3,7));,个人。
  • 我个人会使用 Guava 的 ImmutableSet.of(),但我在这里开始很慢 :) 看着他的声明 public HashMap&lt;T, HashSet&lt;T&gt;&gt; foo_graph;,不确定你的建议是否可行,因为地图是类型&lt;HashSet&gt;...
  • 这两个答案都很有意义!感谢您指出我的错误,正如您所知,我对 Java 很陌生:P
猜你喜欢
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
相关资源
最近更新 更多