Как удалить предмет из набора? - PullRequest
7 голосов
/ 27 июля 2010
final Set<Expression> exps = meng.getExps();
Iterator<Expression> iterator = exps.iterator();
final Expression displayedExp = exps.iterator().next();
exps.remove(displayedExp);

Этот код вернет следующую трассировку исключений во время выполнения:

null
java.lang.UnsupportedOperationException
        at java.util.Collections$UnmodifiableCollection.remove(Collections.java:1021)

Реализация Set meng.getExps () является LinkedHashSet.

Ответы [ 2 ]

7 голосов
/ 27 июля 2010

Извините, вам не повезло: набор был обернут Collections.unmodifiableCollection , что делает именно это: делает коллекцию неизменяемой. Единственное, что вы можете сделать, это скопировать содержимое в другой набор и работать с ним.

4 голосов
/ 27 июля 2010

Ваш получатель явно возвращает вам UnmodifiableCollection, который является своего рода оберткой около Set s, которая предотвращает изменение.

Другими словами, API говорит вам: «Это моя коллекция,пожалуйста, смотрите, но не трогайте! "

Если вы хотите изменить его, вы должны скопировать его в новый набор.Существуют копирующие конструкторы для HashSet, которые отлично подходят для этой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...