对于Java语言有些新意,我试图让自己熟悉一个可能遍历列表(或者可能是其他集合)以及每个集合的优点或缺点的所有方法(或者至少是非病态方法).
给定一个List<E> list
对象,我知道以下循环所有元素的方法:
while
/ do while
循环以及)// Not recommended (see below)!
for (int i = 0; i < list.size(); i++) {
E element = list.get(i);
// 1 - can call methods of element
// 2 - can use 'i' to make index-based calls to methods of list
// ...
}
Run Code Online (Sandbox Code Playgroud)
注意:正如@amarseillan指出的那样,这种形式对于迭代List
s来说是一个糟糕的选择,因为该get
方法的实际实现可能不如使用时那样有效Iterator
.例如,LinkedList
实现必须遍历i之前的所有元素以获得第i个元素.
在上面的例子中,List
实现没有办法"保存它的位置"以使未来的迭代更有效.因为ArrayList
它并不重要,因为复杂性/成本get
是恒定时间(O(1)),而a LinkedList
是它与列表的大小(O(n))成比例.
有关内置Collections
实现的计算复杂性的更多信息,请查看此问题 …