Table of Contents
ToggleLinkedList in Java with Examples
雙向鏈結列表,每個元素都是一個節點,在單個位置存儲 3 個值,前一個地址、資料和下一個地址,每當添加元素時,上一個和下一個地址都會更改,其中元素不存儲在連續位置,維護插入順序, LinkedList in Java 介紹常見的 forEach 、 iterator 、 listIterator 、 spliterator 、 trySplit 等方法,本篇增加了範例,並透過單元測試來驗證產出結果。
檔案目錄
./
+- src
+- test
| +- org
| +- ruoxue
| +- java_147
| +- queue
| +- linkedlist
| +- LinkedListWithExamplesTest.java
單元測試
LinkedList Java 提供循環訪問、保留相同元素、轉成陣列等操作列表中的元素。
loop
建立一個 LinkedList ,內有三個元素,迴圈取得元素。
@Test
public void loop() {
List<String> list = new LinkedList<String>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
Papaya
Strawberry
Watermelon
forEach
建立一個 LinkedList ,內有三個元素,迴圈取得元素。
@Test
public void forEach() {
List<String> list = new LinkedList<String>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
list.forEach(e -> System.out.println(e));
}
Papaya
Strawberry
Watermelon
forEachRemaining
LinkedList Java 建立一個 LinkedList ,內有三個元素,迴圈取得剩餘元素。
@Test
public void forEachRemaining() {
List<String> list = new LinkedList<>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
Iterator<String> it = list.iterator();
int i = 0;
while (it.hasNext()) {
System.out.println(it.next());
if (i == 1) {
break;
}
i++;
}
System.out.println("----------");
it.forEachRemaining(e -> {
System.out.println(e);
});
}
Papaya
Strawberry
----------
Watermelon
iterator
LinkedList Java 建立一個 LinkedList ,內有三個元素,迴圈取得元素。
@Test
public void iterator() {
List<String> list = new LinkedList<>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
Papaya
Strawberry
Watermelon
listIterator
LinkedList Java 建立一個 LinkedList ,內有三個元素,迴圈取得元素。
@Test
public void listIterator() {
List<String> list = new LinkedList<>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
ListIterator<String> it = list.listIterator(list.size());
while (it.hasPrevious()) {
System.out.println(it.previous());
}
}
Watermelon
Strawberry
Papaya
spliterator
LinkedList Spliterator in Java 建立一個 LinkedList ,內有三個元素,使用 spliterator 取得元素,等同於 iterator.hasNext 和 iterator.next。
@Test
public void spliterator() {
List<String> list = new LinkedList<>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
Spliterator<String> sit = list.spliterator();
sit.tryAdvance(e -> System.out.println(e));
System.out.println("----------");
sit.forEachRemaining(e -> System.out.println(e));
System.out.println("----------");
sit = list.spliterator();
while (sit.tryAdvance(e -> System.out.println(e))) {
}
}
Papaya
----------
Strawberry
Watermelon
----------
Papaya
Strawberry
Watermelon
trySplit
LinkedList TrySplit in Java 建立一個 LinkedList ,內有三個元素,使用 spliterator 取得元素,trySplit 將目前的拆分器分為兩個新的拆分器並行處理。
@Test
public void trySplit() {
List<String> list = new LinkedList<>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
Spliterator<String> sit = list.spliterator();
Spliterator<String> sit2 = sit.trySplit();
System.out.println(sit.getExactSizeIfKnown());
sit.forEachRemaining(e -> System.out.println(e));
System.out.println("----------");
System.out.println(sit2.getExactSizeIfKnown());
sit2.forEachRemaining(e -> System.out.println(e));
}
0
----------
3
Papaya
Strawberry
Watermelon
toArray
建立一個 LinkedList ,內有三個元素, 轉換成 String 陣列。
@Test
public void toArray() {
int expectedSize = 3;
List<String> list = new LinkedList<String>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
String[] array = new String[list.size()];
list.toArray(array);
for (String e : array) {
System.out.println(e);
}
assertEquals(expectedSize, array.length);
}
Papaya
Strawberry
Watermelon
streamToArray
建立一個 LinkedList ,內有三個元素,使用 Stream ,轉換成 String 陣列。
@Test
public void streamToArray() {
int expectedSize = 3;
List<String> list = new LinkedList<String>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
String[] array = list.stream().toArray(String[]::new);
for (String e : array) {
System.out.println(e);
}
assertEquals(expectedSize, array.length);
}
Papaya
Strawberry
Watermelon
LinkedListWithExamplesTest.java
LinkedList in Java 新增單元測試,驗證是否符合預期。
package org.ruoxue.java_147.queue.linkedlist;
import static org.junit.Assert.*;
import java.util.LinkedList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Spliterator;
import org.junit.Test;
public class LinkedListWithExamplesTest {
@Test
public void loop() {
List<String> list = new LinkedList<String>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
@Test
public void forEach() {
List<String> list = new LinkedList<String>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
list.forEach(e -> System.out.println(e));
}
@Test
public void forEachRemaining() {
List<String> list = new LinkedList<>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
Iterator<String> it = list.iterator();
int i = 0;
while (it.hasNext()) {
System.out.println(it.next());
if (i == 1) {
break;
}
i++;
}
System.out.println("----------");
it.forEachRemaining(e -> {
System.out.println(e);
});
}
@Test
public void iterator() {
List<String> list = new LinkedList<>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
@Test
public void listIterator() {
List<String> list = new LinkedList<>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
ListIterator<String> it = list.listIterator(list.size());
while (it.hasPrevious()) {
System.out.println(it.previous());
}
}
@Test
public void spliterator() {
List<String> list = new LinkedList<>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
Spliterator<String> sit = list.spliterator();
sit.tryAdvance(e -> System.out.println(e));
System.out.println("----------");
sit.forEachRemaining(e -> System.out.println(e));
System.out.println("----------");
sit = list.spliterator();
while (sit.tryAdvance(e -> System.out.println(e))) {
}
}
@Test
public void trySplit() {
List<String> list = new LinkedList<>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
Spliterator<String> sit = list.spliterator();
Spliterator<String> sit2 = sit.trySplit();
System.out.println(sit.getExactSizeIfKnown());
sit.forEachRemaining(e -> System.out.println(e));
System.out.println("----------");
System.out.println(sit2.getExactSizeIfKnown());
sit2.forEachRemaining(e -> System.out.println(e));
}
@Test
public void toArray() {
int expectedSize = 3;
List<String> list = new LinkedList<String>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
String[] array = new String[list.size()];
list.toArray(array);
for (String e : array) {
System.out.println(e);
}
assertEquals(expectedSize, array.length);
}
@Test
public void streamToArray() {
int expectedSize = 3;
List<String> list = new LinkedList<String>();
list.add("Papaya");
list.add("Strawberry");
list.add("Watermelon");
String[] array = list.stream().toArray(String[]::new);
for (String e : array) {
System.out.println(e);
}
assertEquals(expectedSize, array.length);
}
}
心得分享
LinkedList Java 雙向鏈結的資料結構,是一種線性資料結構,每個元素都是一個單獨的對象,具有資料和地址部分,這些元素使用指針和地址鏈結,每個元素稱為一個節點,LinkedList in Java 提供了幾種 LinkedList 常見方法的操作範例,在應用上相當廣泛,再輔以單元測試驗證,建置高效穩定的服務或系統。