2013-10-29 46 views
0

我正在從我的教科書中進行「通用類」練習,嘗試使用HashMap作爲底層結構實現一個Graph數據結構,並帶有鍵是圖中的節點,並且密鑰的值是與該節點相鄰的節點的HashSet。該代碼的開頭是這樣的:當它是一個HashMap的值時添加到HashSet中

public class Graph <T> { 

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

不得不提的是,無論是在HashSet的鍵和值必須是同一類型,這是於T佔位符的原因。用我的方法寫出來,我想用static void main塊測試,但是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方法,我似乎無法添加任何圖形。

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

Eclipse是告訴我在ADDNODE線在我的靜態無效測試塊:

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

有誰知道這是爲什麼?我似乎無法讓它工作,我很難過。既不創建

+0

你們都回答這麼快......這就是爲什麼我愛的StackOverflow :) – karysto

回答

1

肯定。把東西放在方括號裏的語法就不存在了。我發現初始化HashSet最簡單的方法是用Arrays.asList靜態方法。我會寫這樣的東西。

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

我明白了,我明白了。非常感謝,你知道如何追加到相同的HashSet後,它已被輸入到像這樣的HashMap? – karysto

+0

是的,我會知道這一點。如果您查看Javadocs的'Set'接口,請訪問http://docs.oracle.com/javase/7/docs/api/java/util/Set.html,您會發現一些添加方法事物到'Set'對象。 –

+0

它現在正在工作!非常感謝你的朋友:) – karysto

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); 
+0

我可能會做的設置組=新的HashSet <>(Arrays.asList(5,3,7)); , 親自。 – Max

+0

我會親自使用番石榴的ImmutableSet.of(),但我在這裏開始慢:)查看他的聲明'公共HashMap > foo_graph;',不確定你的建議甚至可以工作,因爲地圖是''...... – iluxa

+0

這兩個答案都有很大的意義!感謝您指出我的錯誤,正如您所看到的,我對Java很陌生:P – karysto

相關問題