【发布时间】:2011-06-13 15:34:04
【问题描述】:
如果我在 java 中的链表上使用 for-each 循环, 是否保证我会按顺序迭代元素 它们出现在列表中的哪个位置?
【问题讨论】:
标签: java linked-list
如果我在 java 中的链表上使用 for-each 循环, 是否保证我会按顺序迭代元素 它们出现在列表中的哪个位置?
【问题讨论】:
标签: java linked-list
链表保证按顺序执行。
有序集合(也称为 顺序)。该界面的用户 有精确的控制在哪里 列出每个插入的元素。这 用户可以通过他们的访问元素 整数索引(列表中的位置), 并在列表中搜索元素。
iterator() 以正确的顺序返回此列表中元素的迭代器。
【讨论】:
每个 java.util.List 实现都需要保留顺序,因此您可以使用 ArrayList、LinkedList、Vector 等。它们中的每一个都是有序集合,并且它们中的每一个都保留插入的顺序(参见 http://download.oracle.com/javase/1.4.2/docs/api/java/util/List.html)
【讨论】:
正如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+"->");
}
}
【讨论】:
我发现了 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 循环
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());
}
收集流()实用程序(Java 8)
linkedList.forEach((temp) -> {
System.out.println(temp);
});
需要指出的是,For循环或While循环的运行时间是O(n平方),因为get(i)的操作需要O(n)时间(see this for details)。其他 3 种方式需要线性时间并且性能更好。
【讨论】:
LinkedList.size() 。 +1。
链表确实保证顺序。
不要使用 linkedList.get(i),尤其是在顺序循环中,因为它违背了使用链表的目的并且是低效的代码。
使用 ListIterator
ListIterator<Object> iterator = myLinkedList.listIterator();
while( iterator.hasNext()) {
System.out.println(iterator.next());
}
【讨论】:
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());
}
【讨论】: