0

我现在正在从我的教科书中做一个“通用类”练习,尝试使用 HashMap 作为底层结构来实现一个 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)

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

4

2 回答 2

1

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

g.addNode(5, new HashSet<Integer>(Arrays.asList(5, 3, 7)));
于 2013-10-29T02:18:14.300 回答
0

我必须同意 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);
于 2013-10-29T02:17:15.437 回答