当前位置: 首页 > 面试题库 >

Java:遍历Collection的最佳方法(此处为ArrayList)

冷宏茂
2023-03-14
问题内容

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

遍历一个Collection(这里是ArrayList)

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

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

经典的数组索引循环:

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

迭代器具有next()/ next():

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

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

for (iterable_type iterable_element : collection) {

}

问题答案:

当您还需要元素的索引时,第一个很有用。这基本上等同于ArrayLists 的其他两个变体,但是如果使用,则速度会非常慢LinkedList

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

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



 类似资料:
  • 问题内容: 目前,我正在使用类似: 我对这种方法不是很满意,因为它会创建大量数组(可以包含一本书)。 有没有更好的解决方案来迭代a的行? 问题答案: 您可以使用: 并使用方法:

  • 《 Java Iterator遍历Collection集合元素》一节中主要讲解如何使用 Iterator 接口迭代访问 Collection 集合里的元素,除了这个方法之外,我们还可以使用 Java 5 提供的 foreach 循环迭代访问集合元素,而且更加便捷。如下程序示范了使用 foreach 循环来迭代访问集合元素。 输出结果为: 小牛知识库C++教程 小牛知识库C语言教程 小牛知识库Jav

  • 问题内容: 我需要遍历一些大型数组,并将它们存储在API调用的主干集合中。在不导致循环导致接口无响应的情况下执行此操作的最佳方法是什么? 由于返回的数据太大,ajax请求的返回也将阻塞。我认为我可以将其拆分并使用setTimeout使其在较小的块中异步运行,但是有一种更简单的方法来执行此操作。 我认为网络工作者会很好,但需要更改一些保存在UI线程上的数据结构。我已经尝试过使用它来执行ajax调用,

  • 问题内容: 向后遍历python字符串的最佳方法是什么? 对于-1偏移量的所有需求,以下内容似乎有些尴尬: 以下内容看起来更简洁,但实际上是否生成了反向字符串,从而导致较小的性能损失? 问题答案: 尝试 反向 内置: 该 扭转() 调用会使一个迭代器,而不是复制整个字符串。 PEP 322详细介绍了 reversed() 的动机及其相对于其他方法的优势。

  • 问题内容: 假设我有两个或两个以上相同长度的列表。遍历它们的好方法是什么? ,是列表。 要么 还是我缺少任何变体? 使用一个相对于另一个有什么特别的优势吗? 问题答案: 通常的方法是使用: 这将停止两个iterables时较短且耗尽。另外值得注意的是:(仅适用于Python 2)和(适用于Python 3)。

  • 这不只是为每个属性做一堆if/else if用例吗?