【发布时间】:2011-01-07 07:59:13
【问题描述】:
我正在迁移一段代码以使用泛型。这样做的一个论点是,for 循环比跟踪索引或使用显式迭代器要干净得多。
在大约一半的情况下,现在使用索引以相反的顺序迭代列表(一个 ArrayList)。
有人可以建议一种更简洁的方法(因为我不喜欢使用集合时的indexed for loop),尽管它确实有效?
for (int i = nodes.size() - 1; i >= 0; i--) {
final Node each = (Node) nodes.get(i);
...
}
注意:我不能在 JDK 之外添加任何新的依赖项。
【问题讨论】:
-
使用显式索引迭代索引数据结构有什么不好?至少它告诉你到底发生了什么。为了向后迭代,我总是使用以下略短的习语:
for (int i = nodes.size(); --i >= 0;) -
没什么特别的,我宁愿编程到一个界面,不知道我正在使用什么样的列表。虽然我很喜欢你的短手。 (+1 条评论)
-
@x4u:虽然 Iterator 快速失败并且允许在迭代过程中轻松删除元素,但其中并没有太多内容。
-
这个类被破坏了,因为用户可能想要对同一个 Iterable 进行第二次迭代,或者列表可能会在构造迭代和迭代之间发生变化。我敢肯定,出于您的目的,您只需确保不这样做,但修复代码不会太难;或者只是从 Guava 中窃取代码(Apache 2.0 许可证):code.google.com/p/guava-libraries/source/browse/trunk/src/com/…
-
很公平,但如果我没看错的话,即使是番石榴也容易受到同样的影响。如果用户保留反向结果的副本,它会遇到同样的问题。
标签: java collections