从集合中删除元素

2022-09-02 02:29:28

我正在尝试删除集合中所有长度相等的字符串。这是到目前为止我的代码,但我在增强型循环中从迭代器获取索引时遇到问题。

public static void removeEvenLength(Set<String> list) {
    for (String s : list) {
        if (s.length() % 2 == 0) {
            list.remove(s);
        }
    }
}

答案 1

A 没有元素索引的概念。元素在集合中没有顺序。此外,在循环访问元素时,应使用 when 迭代来避免在从集合中删除元素出现 ConcurrentModificationExceptionSetIterator

for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
    String s =  iterator.next();
    if (s.length() % 2 == 0) {
        iterator.remove();
    }       
}

请注意对 的调用,而不是 。Iterator.remove()Set.remove()


答案 2

Java 8 引入了 Collection.removeIf(),它允许您执行以下操作:

set.removeIf(s -> s.length() % 2 == 0)