它應該簡單地爲節點5的5 = [6],爲什麼3個不同的值。另外,我知道,這個當前的代碼是錯誤的大時間,因爲當我添加像2,1和2,3這樣的邊時,它甚至會執行2 = [3,3]。它只是用最後一個替換舊值並複製它。這是帶有結果的圖像。爲什麼我的ArrayList填充了重複的節點值?
Graph.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map.Entry;
public class Graph {
HashMap <Integer, ArrayList<Integer>> adj =new HashMap<Integer, ArrayList<Integer>>();
public void addEdge(int source, int destination) {
ArrayList<Integer> list = new ArrayList<Integer>();
adj.put(source,list);
list.add(destination);
for(Entry<Integer, ArrayList<Integer>> entry: adj.entrySet()) {
int existing = entry.getKey();
System.out.println("Existing: "+existing);
System.out.println("Source: " +source);
if (source != existing) {
//adj.get(2).add(9);
//System.out.println(source +": "+ destination);
adj.get(source).add(destination);
}
}
}
public void print() {
System.out.println(adj);
}
}
AdjacencyList.java
import java.util.Scanner;
public class AdjacencyList {
public static void main(String[] args) {
Scanner in = new Scanner (System.in);
System.out.println("Enter nodes below like (u,v):");
Graph g = new Graph();
for (int i=0; i<3; i++) {
String nodes = in.nextLine();
String[] data = nodes.split(",");
String u = data[0];
String v = data[1];
int inNode = Integer.parseInt(u);
int outNode =Integer.parseInt(v);
g.addEdge(inNode,outNode);
System.out.println("Added to list");
}
g.print();
}
}
1)什麼是你甚至想幹什麼? 2)請花些時間並使用標記,並且不要張貼難以閱讀的截圖。 – qqilihq
對不起,我盡力弄清楚你的意思和你想做什麼,但5分鐘後,我仍然無法弄清楚。試着重新解釋一下這個問題會更清楚一點嗎? – rockinfresh
循環中的行'adj.get(source).add(destination)'在_every iteration_上被調用。很顯然,通過一般的Map方法,除了一次迭代外,至少所有的source!= destination都必須是真的。剩下的時間你重複將'destination'添加到'source'列表中。我懷疑你要做的是'entry.getValue()。add(destination)'。 –