Java 命令;至于;数组上的指令<&燃气轮机;
在我的代码中,我有:Java 命令;至于;数组上的指令<&燃气轮机;,java,android,arrays,for-loop,Java,Android,Arrays,For Loop,在我的代码中,我有: Array<Block> blocks; 函数shouldBeRemoved的构造方式应确保应删除的块始终是最旧的(在其他块之前添加) 我想要的是优化这个函数:如果我假设for循环将按照对象添加的顺序迭代对象,,那么一旦我到达一个不应该删除的块,我就可以中断循环并节省大量时间(通常,在25-35个迭代中,每次迭代都必须删除大约5-9个块),方法是不检查其他块的条件 我的问题是:我应该使用什么样的结构来确保for循环按对象的“年龄”(即先出现较老的对象)迭代对象
Array<Block> blocks;
函数shouldBeRemoved
的构造方式应确保应删除的块始终是最旧的(在其他块之前添加)
我想要的是优化这个函数:如果我假设for
循环将按照对象添加的顺序迭代对象,,那么一旦我到达一个不应该删除的块,我就可以中断循环并节省大量时间(通常,在25-35个迭代中,每次迭代都必须删除大约5-9个块),方法是不检查其他块的条件
我的问题是:我应该使用什么样的结构来确保for
循环按对象的“年龄”(即先出现较老的对象)迭代对象。它是Array
,List
,ArrayList
,Set
等吗
谢谢!如果您使用
ArrayList
并始终使用add(E object)
方法来添加新元素(而不是使用指定新元素索引的重载方法),那么它将按照您的意愿工作
将指定的对象添加到此ArrayList的末尾
因此,当您使用(:)的
遍历列表时
循环,它将从最旧的元素开始。您可以使用a。它实现了界面,因此它提供了add
和poll
来在末尾添加元素,然后在前面删除它们。如果对象的数量在25-35之间,并且您正在删除atmost 10,我认为您拥有的很好。看起来您正在寻找一个早期的优化。记住这个谚语-<代码>过早优化是万恶之源<代码>。也就是说,如果你的<代码>逻辑应该是很复杂的,也许你应该集中精力。考虑执行<代码>比较器<代码> >接口> <代码> Bug <代码>。但是,再一次,我可能已经使它MOR。比现在复杂得多。
Array<Block> to_be_removed = new Array<Block>();
for (Block b : blocks) {
if (shouldBeRemoved(b)) {
to_be_removed.add(b);
}
}
blocks.removeAll(to_be_removed, true);