java – 迭代链表
如果我在java中的链表上使用for-each循环,是否保证我将按照它们在列表中出现的顺序迭代元素?
保证链接列表按顺序执行。
从文档中
有序集合(也称为序列)。 该接口的用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。
iterator()以适当的顺序返回此列表中元素的迭代器。
我找到了5种主要方法来迭代Java中的链表(包括Java 8方式):
- 对于循环
- 增强的For循环
- 而Loop
- 迭代器
- 集合的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 )