Как удалить элемент из набора?
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)
реализация набора meng.getExps () является LinkedHashSet.
2 ответов
Извините, вам не повезло: набор был завернут с сборники.unmodifiableCollection, который делает именно это: делает коллекцию немодифицируемой. Единственное, что вы можете сделать, это скопировать содержимое в другой набор и работать с этим.
ваш геттер явно возвращает вам UnmodifiableCollection
, который является оберткой вокруг всякие Set
s, который предотвращает модификацию.
другими словами, API говорит вам: "это моя коллекция, пожалуйста, смотрите, но не трогайте!"
Если вы хотите изменить его, вы должны скопировать его в новый набор. Существуют копирующие конструкторы для HashSet
это отлично подходит для этой цели.