Как перебрать Set и добавить элементы к нему в Java? - PullRequest
0 голосов
/ 06 июля 2019

Я хочу перебрать множество, и если какое-либо условие удовлетворяется, я хочу добавить в него элементы.Пока я делаю это, я получаю «ConcurrentModificationException».Когда я искал ответ, я обнаружил, что в случае listIterator у нас есть метод add () и remove (), но я не могу использовать list, так как мне также нужно заботиться о дубликатах.

Пожалуйста, предложитеспособ достижения этого.

Редактировать:

int[] A = {1,2,3,4,5,10,6,7,9};
Set<Integer> s = new HashSet<>();
s.add(1);
Iterator i = s.iterator();
while(i.hasNext()){
      int temp = i.next();
      int x = next element of array A;
      if(x%2==0){
          s.add(temp*x);
          }
       }

Но это вызывает исключение ConcurrentModificationException.

1 Ответ

0 голосов
/ 06 июля 2019

Как перебрать Set и добавить к нему элементы в Java?

Это невозможно сделать. Конечно, не с HashSet или TreeSet. Возможно, вам потребуется найти альтернативный способ кодирования вашего алгоритма, который не зависит от этого.

Обычным решением является создание временного списка, добавление элементов в этот список, а затем, когда вы закончите итерацию, используйте addAll для добавления элементов списка в набор. Но это не сработает, потому что вы, похоже, хотите, чтобы ваш итератор видел добавленные вами новые элементы.

Второй подход будет использовать ConcurrentHashMap и Collections::newSetFromMap вместо HashSet. Итерация параллельной коллекции не даст ConcurrentModificationException. Однако обратной стороной является то, что нет никаких гарантий, что итератор увидит все элементы, которые были добавлены во время итерации. Так что это, вероятно, не сработает (надежно) для вашего примера.

...