Java:迭代集合的最佳方式(此处为ArrayList)

2022-08-31 09:52:43

今天,当我到达一段我已经使用了数百次的代码时,我很高兴地编码了:

循环访问集合(此处为 ArrayList)

出于某种原因,我实际上查看了Eclipse的自动完成选项,这让我感到疑惑:

以下循环在哪些情况下比其他循环更好?

经典数组索引循环:

for (int i = 0; i < collection.length; i++) {
  type array_element = collection.get(index);
}

迭代器 hasNext()/next():

for (Iterator iterator = collection.iterator(); iterator.hasNext();) {
  type type = (type) iterator.next();   
}

我最喜欢的是因为它写起来很简单:

for (iterable_type iterable_element : collection) {

}

答案 1

第一个在需要元素索引时也很有用。这基本上等同于 s 的其他两个变体,但如果使用 .ArrayListLinkedList

当您不需要元素的索引,但可能需要在迭代时删除元素时,第二个很有用。但这有一个缺点,即IMO有点过于冗长。

第三个版本也是我的首选。它很短,适用于不需要任何索引或基础迭代器的所有情况(即,您只是访问元素,而不是以任何方式删除它们或修改 - 这是最常见的情况)。Collection


答案 2

它们都有自己的用途:

  1. 如果你有一个可迭代的,并且需要无条件地遍历到所有这些:

    用于 (iterable_type iterable_element : 集合)

  2. 如果你有一个可迭代但需要有条件遍历:

    for (Iterator iterator = collection.iterator(); iterator.hasNext();)

  3. 如果数据结构不实现可迭代:

    for (int i = 0; i < collection.length; i++)