HOWTO · Java
在 Java 中遍歷連結列表
本文介紹如何遍歷 Java 中的連結串列
連結串列是資料元素的線性有序集合。元素的排列在儲存器中無處不在或隨機的位置。連結串列資料結構是使用節點連線的。Node 保留資料欄位和引用連結,它們是序列中下一個元素的儲存位置。
我們將連結列表元素儲存在不連續的記憶體位置中,最後一個節點包含一個指向空引用的指標。
有很多方法可以迴圈訪問連結串列。這是下面提到的幾種方法。
在 Java 中使用 for 迴圈遍歷連結列表
在下面的程式碼示例中,使用 new 關鍵字例項化了 LinkedList 類。LinkedList 類的 add() 方法將元素新增到列表中。add 方法將指定的元素追加到此列表的末尾。此方法等效於 addLast 方法。當元素成功新增到列表中時,該方法返回 true。
建立列表後,我們使用 for 迴圈對其進行迭代。在下面的程式碼中,int i=0 是計數器變數的例項。使用指示變數應小於列表大小的條件。列表的大小是使用 size() 方法計算的。最後,變數的值增加一。這個完整的過程將一直執行,直到變數值大於列表的大小為止。
package linkedList;
import java.util.LinkedList;
public class IterateLinkedListUsingForLoop {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("First");
list.add("Second");
System.out.println("Iterating the list using for-loop");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
上面的程式生成如下所示的輸出。
Iterating the list using for-loop
First
Second
使用 Java 中增強的 for 迴圈遍歷連結列表
增強的 for 迴圈也稱為 for-each 迴圈,是 for 迴圈的一種表現形式。
在下面的程式碼中,我們應該例項化一個連結串列物件。然後應向其中新增一些元素(例如 String 物件)。現在進行迭代,在這種情況下,我們將使用 for-each。
package linkedList;
import java.util.LinkedList;
public class IteratingLinkedListUsingForEach {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("First");
list.add("Second");
for (String temp : list) {
System.out.println(temp);
}
}
}
該程式的輸出與第一個程式中的輸出相同。
使用 while 迴圈遍歷連結列表
在所有提到的方式中,例項化和向列表過程新增元素都將相似。
在下面的示例中,計數器變數值在 while 迴圈外例項化為 0。while 迴圈語法沒有例項化的地方。現在應用條件。這將檢查變數是否小於給定列表的大小。它將返回 true,並且將執行 println() 函式。在那之後,我們應該增加計數器變數。該過程將重複進行,直到變數變得大於列表大小為止。
package linkedList;
public class IteratingLinkedListUsingWhileLoop {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("First");
list.add("Second");
int i = 0;
while (i < list.size()) {
System.out.println(list.get(i));
i++;
}
}
}
使用 Java 中的 Iterator 類迭代連結列表
Iterator 是一個類,用於迴圈 Collections 物件。這些是 Array、ArrayList、LinkedList 等等。我們稱其為迭代器,因為它遍歷集合物件。應該使用 Iterator 類中的方法來迭代 Collections 物件。
我們使用 iterator() 方法來獲取任何集合的 Iterator。hasNext 方法檢查列表中是否包含更多元素。如果迭代中存在更多元素,則返回 true。
next 方法獲取迴圈中的下一個元素。它返回迭代中的下一個當前物件,如果列表中不存在任何元素,則丟擲 NoSuchElementException。
下面的程式碼演示了 Iterator 類及其方法。
package linkedList;
public class IteratingLinkedListUsingIterator {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("First");
list.add("Second");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
使用 Java 8 Stream 迭代連結列表
一個 stream 總是在一個 Collection 物件上形成。在下面的程式中,我們使用 stream 方法。函式被應用到流函式鏈上。forEach 是終端操作。這意味著終端功能後不能執行任何操作。它需要一個 consumer 流,並且此流不發出元素而是消耗它們。
下面的程式碼顯示了使用 Java 8 流和它們的函式來迭代列表的情況。
package linkedList;
public class IteratingLinkedListUsingStreams {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("First");
list.add("Second");
list.stream().forEach((element) -> { System.out.println(element); });
}
}