从列表中删除第一个'n'元素而不进行迭代

Eld*_*abu 18 java list

我需要一种从列表中删除项目的有效方法.如果发生某些情况,我需要从列表中删除第一个'n'个元素.有人可以建议最好的方法吗?请记住:性能是我的一个因素,所以我需要一种比itterating更快的方法.谢谢.

我正在考虑一种方法,通过这种方式可以将第n个项目作为列表的开头,以便0-n项目将被垃圾收集.可能吗?

Jig*_*shi 20

创建 subList()

返回此列表中fromIndex(包含)和toIndex(独占)之间的部分视图.(如果fromIndex和toIndex相等,则返回的列表为空.)返回的列表由此列表支持,因此返回列表中的更改将反映在此列表中,反之亦然.返回的列表支持此列表支持的所有可选列表操作.

检查此方法的实现并进行一些测试以确定性能


Ope*_*emi 10

单行解决方案是:

 list.subList(n, m).clear();
Run Code Online (Sandbox Code Playgroud)

m - n从列表中删除从索引开始到n索引结束的元素m - 1


San*_*osh 8

你可以用ArrayList.removeRange(int fromIndex, int toIndex).

引用文档:

从此列表中删除索引介于fromIndex(包含)和toIndex(独占)之间的所有元素.将任何后续元素向左移动(降低其索引).此调用通过(toIndex - fromIndex)元素缩短列表.(如果toIndex == fromIndex,此操作无效.)

  • `removeRange`在`ArrayList`上保护了访问权限 (8认同)

Juv*_*nis 8

Jigar Joshi的答案已包含您需要的解决方案.我想补充一些其他的东西.clear()我猜,调用子列表将处理您的工作.但它可能在后台使用迭代,我不确定.您使用的示例脚本:

ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<Integer> subList = (ArrayList<Integer>) list.subList(0, 9);
subList.clear();
Run Code Online (Sandbox Code Playgroud)


小智 5

如果性能对你来说很关键,那么我不确定是否可以使用ArrayList中的内置函数.我怀疑它们的运行速度比O(n)快,遗憾的是Java文档对此没有任何说明.也许你应该研究一些定制的结构,如绳索.