首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >根据另一个列表中的项从列表中删除项目

根据另一个列表中的项从列表中删除项目
EN

Stack Overflow用户
提问于 2014-12-09 17:33:16
回答 4查看 55关注 0票数 0

假设我有一个名为ArrayList of Child对象的children

代码语言:javascript
代码运行次数:0
运行
复制
ArrayList<Child> children = new ArrayList<>(data);

现在,我有了一个整数列表,它是children中用于子级的一些索引。

代码语言:javascript
代码运行次数:0
运行
复制
List<Integer> items = new ArrayList<>(data2);

删除children中具有与items中整数匹配的索引的所有子级的最有效方法是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-12-09 17:44:13

如果没有对项进行排序(首先是更大的值):Collections.sort(items, Collections.reverseOrder());

然后:

代码语言:javascript
代码运行次数:0
运行
复制
for (Integer i : items) {
    children.remove(i);
}
票数 2
EN

Stack Overflow用户

发布于 2014-12-09 17:36:40

最好的方法是创建一个包含传递条件的元素的新列表。

票数 1
EN

Stack Overflow用户

发布于 2014-12-09 17:51:36

作为aurelianus上面的回答的另一种选择,考虑一下您的用例:

对项数组进行排序,然后按索引的降序从子数组中删除子对象。

费用考虑:

  • 对索引列表进行排序--取决于移除索引的数量,这是否值得关注。
  • 对于删除的每一个子对象,具有较高索引的所有子对象都会在backing数组中由一个子对象移动。我怀疑这是用System.arraycopy()完成的,这将是相当有效的。但是,成本随着要删除的元素的数量和索引更高的孩子的数量而增加。
  • 内存是就地使用的.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27385165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档