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 物件。這些是 ArrayArrayListLinkedList 等等。我們稱其為迭代器,因為它遍歷集合物件。應該使用 Iterator 類中的方法來迭代 Collections 物件。

我們使用 iterator() 方法來獲取任何集合的 IteratorhasNext 方法檢查列表中是否包含更多元素。如果迭代中存在更多元素,則返回 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); });
  }
}