我在for(Entry ...)循環中得到一個錯誤,在調用dfs()之後,它會說concurrentmodificationexception。即使visitedOrder與foreach循環無關,我也不知道它爲什麼會發生。這怎麼解決?Java:併發修改異常
public TreeMap<Integer, Integer> DFS()
{
TreeMap<Integer, Integer> stack = new TreeMap<Integer, Integer>();
TreeMap<Integer, Integer> visitedOrder = stack;
for(int i = 1; i < graph[0].length-1; i++)
{
stack.put(i, 0);
}
for(Entry<Integer, Integer> vertex : stack.entrySet())
{
if(vertex.getValue() == 0)
dfs(vertex.getKey(), visitedOrder);
}
System.out.println(visitedOrder.values());
return visitedOrder;
}
public void dfs(int vertex, TreeMap<Integer, Integer> visited)
{
visited.put(vertex, order++);
int currVertex = vertex;
for(int i = vertex; i < graph[0].length-1;i++)
{
if(graph[vertex][i+1] == 1)
{
dfs(++currVertex, visited);
break;
}
currVertex++;
}
}
您的地圖被多個線程訪問,其中一個線程修改地圖內容(使用'dfs'方法),而其他線程瀏覽地圖內容。爲了解決這個問題,你可以使用一個鎖對象來同步代碼塊。 – 2013-03-06 04:15:20
雖然我有2個樹形圖。我認爲這會解決它? – user1375155 2013-03-06 04:17:40
如果兩個圖都指向相同的地圖對象參考,則不適用。 – 2013-03-06 04:18:50