Я получаю сообщение об ошибке в цикле for (Entry ...), где после вызова dfs() он скажет, что это concurrentmodificationexception. Я не знаю, почему это происходит, хотя visitOrder не связан с циклом 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'), а другой поток перемещается по содержимому карты. Чтобы исправить это, вы можете использовать объект блокировки для синхронизации блока кода. –
У меня есть две карты деревьев. Я думал, что это исправит? – user1375155
Нет, если обе карты указывают на одну и ту же ссылку на объект карты. –