2015-09-22 3 views
0

Я пытаюсь зациклиться на группе людей, и для каждого человека я получаю друзей. Затем пройдите через друзей и для каждого друга заведите своих друзей и вызовите метод под названием groupPeople(). Но я получаю ConcurrentModificationException. Любая идея почему?ConcurrentModificationException и не знаю почему?

for (User user : this.groupA) { 
      Set<User> listofFriends = user.getFriends(); 
      Iterator<User> iterator = listofFriends.iterator(); 
       while(iterator.hasNext()) { 
        User setElement = iterator.next(); 
        Set<User> listofFriends2 = setElement.getFriends(); 
        groupPeople(listofFriends2,10); 
       } 
     } 
private void groupPeople(Set<User> group,int number) { 
     for (User user : group) { 
      int y = 0; 
      while(y<number){ 
       user.addFriend(socialNetwork.getPeopleInNetwork().get(++counter)); 
       y++; 
      } 
     } 
    } 

Сообщение об исключении:

Exception in thread "main" java.util.ConcurrentModificationException 
    at java.util.HashMap$HashIterator.nextEntry(HashMap.java:922) 
    at java.util.HashMap$KeyIterator.next(HashMap.java:956) 
+1

Что это такое за стекловидность и какая линия? –

+0

в строке User setElement = iterator.next(); –

+0

Исключение в потоке "основного" java.util.ConcurrentModificationException \t в java.util.HashMap $ HashIterator.nextEntry (HashMap.java:922) \t в java.util.HashMap $ KeyIterator.next (HashMap.java:956) –

ответ

1

Скорее всего, вы изменяете Set<User> listofFriends в одном из этих методов, например, groupPeople

Это может быть связано с тем, что Пользователь является другом, или listOfFriends2 - это тот же набор или что-то еще, что вы делаете в вызываемом вами методе.

Предлагаю вам выполнить код в своем отладчике, чтобы найти проблему.

+0

Я отредактировал свой вопрос –

+0

@ AkinDönmez Вы не указали, где в вашем коде вы получаете ошибку, которая намного интереснее. Основная проблема заключается в том, что вы не можете изменять HashMap или HashSet во время итерации по нему. Либо вам нужно взять копию вещей, которые вы хотите изменить, взять копию ключей или использовать коллекцию, которая поддерживает одновременный доступ, такой как ConcurrentHashMap –