我在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