java - 从列表中删除项目或添加构建新列表?

标签 java collections

<分区>

我经常遇到必须迭代 ArrayList 并希望根据任何条件从中创建子集的情况。

从性能的角度来看:对于要删除的元素,是使用迭代器和 iterator.remove() 更好,还是应该将这些元素添加到新列表?

for (Iterator<Object> it = list.iterator(); it.hasNext(); ) {
    Object item = it.next();
    if (!conditionMatches(item)) {
        it.remove();
    }
}

List<Object> newList = new ArrayList<>();
for (Object item : list) {
   it (contitionMatches(item)) {
      newList.add(item);
   }
}

最佳答案

选项 1 不适用于只读列表,例如 Arrays.asList 返回的列表。

此外,当列表很长且必须复制大量支持数组​​时,从 ArrayList删除 的成本很高。

选项 2 适用于所有列表。

这也是我们鼓励在流中使用的模式:

    List<String> l = Arrays.asList("A","B","C");
    List<String> filtered = l.stream()
            .filter(s -> s.equals("A"))
            .collect(Collectors.toList());

恕我直言 - 使用这个。选项 1 中的节省是虚幻的。

关于java - 从列表中删除项目或添加构建新列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32764376/

相关文章:

java - 从Java 8对象列表中获取具有最大日期属性的对象

java - 如何使用 log4j2 和 slf4j 运行 WildFly-8.x

Java - 实例变量依赖于构造函数参数

java - 尚未找到 JAXB-API 的实现(运行 java jar 时)

java - 有效比较两个 ArrayList 的内容

java - HashMap中重复元素查找和替换逻辑

java - 设计 Java 文件下载管理器的最佳方法

java - 计算队列中的消息(以编程方式)-Jboss 7

vb.net - 创建集合对象

collections - MongoDB - 如何从集合中查询嵌入文档