【发布时间】:2014-02-21 10:33:32
【问题描述】:
在我的代码中我有这个:
Array<Block> blocks;
在不同的时间,对象被添加到该数组中,并且我需要定期检查其中哪些对象太旧并且需要删除。
我使用for指令:
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);
函数shouldBeRemoved 的构造方式是,应该删除的块始终是最旧的(已在其他块之前添加)。
我想要优化这个功能:如果我假设for 循环将遍历对象按照添加的顺序,那么一旦我到达一个不应该出现的块通过不检查其他块的条件,我可以打破循环并节省大量时间(通常每次迭代必须从总共 25-35 个块中删除大约 5-9 个块)。
我的问题是:我应该使用什么样的结构来确保for 循环按对象的“年龄”迭代对象(即较旧的对象首先出现)。是Array、List、ArrayList、Set等吗?
谢谢!
【问题讨论】:
-
您可以使用
LinkedList。它实现了Queue接口,所以它提供了add和poll在末尾添加元素并在前面删除它们。 -
如果对象的数量在 25-35 左右并且您最多删除 10 个,我认为您拥有的东西是好的。看来您正在寻找过早的优化。记住这句话-
Premature optimization is the root of all evil。话虽这么说,如果您的shouldBeRemoved逻辑非常复杂,也许您应该专注于这一点。考虑为Block实现Comparator接口。但话又说回来,我可能让它变得比现在更复杂。
标签: java android arrays for-loop