[英]java - iterating a linked list
如果我在 java 中的鏈表上使用 for-each 循環,是否可以保證我會按照元素出現在列表中的順序對元素進行迭代?
我發現了在 Java 中迭代鏈表的 5 種主要方法(包括 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 Loop或While Loop的運行時間是 O(n square),因為get(i)
操作需要 O(n) 時間( 詳情請看這里)。 其他 3 種方式需要線性時間並且性能更好。
鏈表保證按順序執行。
從文檔
有序集合(也稱為序列)。 此界面的用戶可以精確控制每個元素在列表中的插入位置。 用戶可以通過它們的整數索引(在列表中的位置)訪問元素,並在列表中搜索元素。
iterator()以適當的順序返回此列表中元素的迭代器。
正如 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+"->");
}
}
鏈表確實保證順序。
, especially inside a sequential loop since it defeats the purpose of having a linked list and will be inefficient code.不要使用 ,尤其是在順序循環中,因為它違背了擁有鏈表的目的,並且代碼效率低下。
使用列表
ListIterator<Object> iterator = myLinkedList.listIterator();
while( iterator.hasNext()) {
System.out.println(iterator.next());
}
每個 java.util.List 實現都需要保留順序,因此您使用的是 ArrayList、LinkedList、Vector 等。它們中的每一個都是有序集合,並且每一個都保留插入順序(請參閱http://download.oracle .com/javase/1.4.2/docs/api/java/util/List.html )
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());
}
參考: Java 鏈表示例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.