java – 迭代链表

如果我在java中的链表上使用for-each循环,是否保证我将按照它们在列表中出现的顺序迭代元素?

保证链接列表按顺序执行。

从文档中

有序集合(也称为序列)。 该接口的用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。

iterator()以适当的顺序返回此列表中元素的迭代器。

我找到了5种主要方法来迭代Java中的链表(包括Java 8方式):

  1. 对于循环
  2. 增强的For循环
  3. 而Loop
  4. 迭代器
  5. 集合的stream()util(Java8)

对于循环

LinkedList linkedList = new LinkedList<>(); System.out.println("==> For Loop Example."); for (int i = 0; i < linkedList.size(); i++) { System.out.println(linkedList.get(i)); } 

增强了循环

 for (String temp : linkedList) { System.out.println(temp); } 

循环

 int i = 0; while (i < linkedList.size()) { System.out.println(linkedList.get(i)); i++; } 

迭代器

 Iterator Iterator = linkedList.iterator(); while (Iterator.hasNext()) { System.out.println(Iterator.next()); } 

集合流()util(Java 8)

 linkedList.forEach((temp) -> { System.out.println(temp); }); 

有一点需要指出的是, For循环While循环的运行时间是O(n平方),因为get(i)操作需要O(n)时间( 详情请参阅此内容 )。 其他3种方式需要线性时间并且表现更好。

正如Linkedlist的定义所说,它是一个序列,您可以保证按顺序获取元素。

例如:

 import java.util.LinkedList; public class ForEachDemonstrater { public static void main(String args[]) { LinkedList pl = new LinkedList(); pl.add('j'); pl.add('a'); pl.add('v'); pl.add('a'); for (char s : pl) System.out.print(s+"->"); } } 

每个java.util.List实现都需要保留顺序,因此您要么使用ArrayList,LinkedList,Vector等,每个都是有序集合,每个集合都保留了插入的顺序(请参阅http://download.oracle .com / javase / 1.4.2 / docs / api / java / util / List.html )