如果我在java中的链表上使用for-each循环, 是否保证我将按顺序迭代元素 它们出现在列表中?
答案 0 :(得分:39)
我找到了5种主要方法来迭代Java中的链表(包括Java 8方式):
For循环
LinkedList<String> 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);
}
while循环
int i = 0;
while (i < linkedList.size()) {
System.out.println(linkedList.get(i));
i++;
}
迭代器
Iterator<String> iterator = linkedList.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
集合流()util(Java 8)
linkedList.forEach((temp) -> {
System.out.println(temp);
});
有一点需要指出的是, For Loop 或 While Loop 的运行时间为O(n平方),因为get(i)
操作需要O( n)时间(see this for details)。其他3种方式需要线性时间并且表现更好。
答案 1 :(得分:13)
保证链接列表按顺序执行。
有序集合(也称为 序列)。此界面的用户 精确控制在哪里 列表中插入了每个元素。该 用户可以通过他们访问元素 整数索引(列表中的位置), 并搜索列表中的元素。
iterator() 以适当的顺序返回此列表中元素的迭代器。
答案 2 :(得分:7)
正如Linkedlist的定义所说,它是一个序列,您可以保证按顺序获取元素。
例如:
import java.util.LinkedList;
public class ForEachDemonstrater {
public static void main(String args[]) {
LinkedList<Character> pl = new LinkedList<Character>();
pl.add('j');
pl.add('a');
pl.add('v');
pl.add('a');
for (char s : pl)
System.out.print(s+"->");
}
}
答案 3 :(得分:2)
链接列表不能保证顺序。
请勿使用 linkedList.get(i),尤其是在顺序循环中,因为它违反了拥有链接列表的目的,并且代码效率低下。
使用 ListIterator
ListIterator<Object> iterator = wordTokensListJava.listIterator();
while( iterator.hasNext()) {
System.out.println(iterator.next());
}
答案 4 :(得分:0)
每个java.util.List实现都需要保留顺序,因此要么使用ArrayList,LinkedList,Vector等,每个都是有序集合,每个集合都保留了插入顺序(参见http://download.oracle.com/javase/1.4.2/docs/api/java/util/List.html })
答案 5 :(得分:0)
iterate LinkedList by using iterator
LinkedList<String> linkedList = new LinkedList<String>();
linkedList.add(“Mumbai”);
linkedList.add(“Delhi”);
linkedList.add(“Noida”);
linkedList.add(“Gao”);
linkedList.add(“Patna”);
Iterator<String> itr = linkedList.iterator();
while (itr.hasNext()) {
System.out.println(“Element is =”+itr.next());
}