Jas*_*ers 94 java collections for-loop
今天,当我得到一段已经使用过数百次的代码时,我很乐意编写代码:
迭代集合(这里是ArrayList)
出于某种原因,我实际上看了Eclipse的自动完成选项,它让我想知道:
以下循环比其他循环更好用?
经典数组索引循环:
for (int i = 0; i < collection.length; i++) {
type array_element = collection.get(index);
}
Run Code Online (Sandbox Code Playgroud)
Iterator hasNext()/ next():
for (Iterator iterator = collection.iterator(); iterator.hasNext();) {
type type = (type) iterator.next();
}
Run Code Online (Sandbox Code Playgroud)
我最喜欢的,因为它写得如此简单:
for (iterable_type iterable_element : collection) {
}
Run Code Online (Sandbox Code Playgroud)
MAK*_*MAK 101
当你需要元素的索引时,第一个是有用的.这基本上等同于ArrayList
s 的其他两个变体,但如果使用的话,它会非常慢LinkedList
.
当您不需要元素的索引但在迭代时可能需要删除元素时,第二个是有用的.但这样做的缺点是IMO有点过于冗长.
第三个版本也是我的首选.它很简短,适用于您不需要任何索引或底层迭代器的所有情况(即您只访问元素,不删除它们或Collection
以任何方式修改它们- 这是最常见的情况).
Sur*_*ran 36
所有这些都有自己的用途:
如果你有一个iterable并且需要无条件地遍历所有这些:
for(iterable_type iterable_element:collection)
如果你有一个可迭代但需要有条件地遍历:
for(Iterator iterator = collection.iterator(); iterator.hasNext();)
如果数据结构不实现iterable:
for(int i = 0; i <collection.length; i ++)
snr*_*snr 11
Java 8还有另外的集合'stream()util
collection.forEach((temp) -> {
System.out.println(temp);
});
Run Code Online (Sandbox Code Playgroud)
要么
collection.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
有关Java 8流和关于wonderers 链接的集合的更多信息