Java LinkedList Class - Java 147

Java LinkedList Class – Java 147

Java LinkedList Class

實作集合框架的 List 、 Queue 接口,雙向鏈結是一種線性資料結構,其中元素不存儲在連續位置,每個元素稱為一個節點,具有資料和地址部分,LinkedList Class 介紹常見的 contains 、 indexOf 、 sort 、 stream 、 subList 等方法,了解陣列列表的不同操作和方法,本篇增加了範例,並透過單元測試來驗證產出結果。

檔案目錄

./
   +- src
       +- test
       |   +- org
       |       +- ruoxue
       |           +- java_147
       |               +- queue
       |                   +- linkedlist
       |                       +- LinkedListClassTest.java   

單元測試

LinkedList Class 提供檢查包含、搜索指定、排序、串流操作列表中的元素。

contains

建立一個 LinkedList ,增加三個元素,檢查包含指定的元素。

	@Test
	public void contains() {
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");

		boolean contains = list.contains("Papaya");
		System.out.println(contains);
		assertTrue(contains);

		contains = list.contains("Grape");
		System.out.println(contains);
		assertFalse(contains);
	}
true
false

containsAll

建立一個 LinkedList ,內有三個元素,檢查包含所有指定的元素。

	@Test
	public void containsAll() {
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");

		List<String> list2 = new LinkedList<String>();
		list2.add("Papaya");
		list2.add("Strawberry");

		boolean contains = list.containsAll(list2);
		System.out.println(contains);
		assertTrue(contains);

		contains = list2.containsAll(list);
		System.out.println(contains);
		assertFalse(contains);
	}
true
false

indexOf

Java LinkedList 建立一個 LinkedList ,內有三個元素,搜索指定元素,傳回索引。

	@Test
	public void indexOf() {
		int expected = 1;
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");

		int index = list.indexOf("Strawberry");
		System.out.println(index);
		assertEquals(expected, index);

		index = list.indexOf("Grape");
		System.out.println(index);
		assertEquals(-1, index);
	}
1
-1

lastIndexOf

Java LinkedList 建立一個 LinkedList ,從最後搜索指定元素,傳回索引。

	@Test
	public void lastIndexOf() {
		int expected = 3;
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");
		list.add("Papaya");

		int index = list.lastIndexOf("Papaya");
		System.out.println(index);
		assertEquals(expected, index);

		index = list.indexOf("Grape");
		System.out.println(index);
		assertEquals(-1, index);
	}
3
-1

sort

Arraylist Sort in Java 建立一個 ArrayList ,內有三個元素,排序元素。

	@Test
	public void sort() {
		List<String> list = new LinkedList<String>();
		list.add("Strawberry");
		list.add("Papaya");
		list.add("Watermelon");
		list.sort(Comparator.naturalOrder());
		System.out.println(list);

		list.add("Grape");
		list.sort(Comparator.reverseOrder());
		System.out.println(list);
	}	
[Papaya, Strawberry, Watermelon]
[Grape, Watermelon, Strawberry, Papaya]

stream

Java LinkedList 建立一個 LinkedList ,內有三個元素,執行串流,取得長度大於 6 的元素。

	@Test
	public void stream() {
		int expectedSize = 1;
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");
		list = list.stream().filter(e -> e.length() < 6).collect(Collectors.toList());
		System.out.println(list);
		assertEquals(expectedSize, list.size());
	}
[Strawberry, Watermelon]

parallelStream

Java LinkedList Example 建立一個 LinkedList ,內有三個元素,並行執行串流。

	@Test
	public void parallelStream() {
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");
		list.parallelStream().forEach(System.out::println);
		System.out.println("----------");
		list.parallelStream().forEachOrdered(System.out::println);
	}
Strawberry
Watermelon
Papaya
----------
Papaya
Strawberry
Watermelon

subList

Java LinkedList Example 建立一個 LinkedList ,內有三個元素,建立指定位置的子列表 。

	@Test
	public void subList() {
		int expectedSize = 2;
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");
		System.out.println(list);
		List<String> list2 = list.subList(0, 2);
		System.out.println(list2);

		assertEquals(expectedSize, list2.size());
	}
[Papaya, Strawberry, Watermelon]
[Papaya, Strawberry]

replaceAll

Java LinkedList Example 建立一個 LinkedList ,內有三個元素,替換所有元素 。

	@Test
	public void replaceAll() {
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");
		list.replaceAll(e -> e.toUpperCase());
		System.out.println(list);
	}
[PAPAYA, STRAWBERRY, WATERMELON]

retainAll

建立兩個 LinkedList ,內各有三個元素,只保留相同元素 。

	@Test
	public void retainAll() {
		int expectedSize = 1;
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");

		List<String> list2 = new LinkedList<String>();
		list2.add("Papaya");
		list2.add("Lemon");
		list2.add("Mango");

		list.retainAll(list2);
		System.out.println(list);
		assertEquals(expectedSize, list.size());
	}
[Papaya]

LinkedListClassTest.java

Java LinkedList 新增單元測試,驗證是否符合預期。

package org.ruoxue.java_147.queue.linkedlist;

import static org.junit.Assert.*;

import java.util.LinkedList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

import org.junit.Test;

public class LinkedListClassTest {

	@Test
	public void contains() {
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");

		boolean contains = list.contains("Papaya");
		System.out.println(contains);
		assertTrue(contains);

		contains = list.contains("Grape");
		System.out.println(contains);
		assertFalse(contains);
	}

	@Test
	public void containsAll() {
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");

		List<String> list2 = new LinkedList<String>();
		list2.add("Papaya");
		list2.add("Strawberry");

		boolean contains = list.containsAll(list2);
		System.out.println(contains);
		assertTrue(contains);

		contains = list2.containsAll(list);
		System.out.println(contains);
		assertFalse(contains);
	}

	@Test
	public void indexOf() {
		int expected = 1;
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");

		int index = list.indexOf("Strawberry");
		System.out.println(index);
		assertEquals(expected, index);

		index = list.indexOf("Grape");
		System.out.println(index);
		assertEquals(-1, index);
	}

	@Test
	public void lastIndexOf() {
		int expected = 3;
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");
		list.add("Papaya");

		int index = list.lastIndexOf("Papaya");
		System.out.println(index);
		assertEquals(expected, index);

		index = list.indexOf("Grape");
		System.out.println(index);
		assertEquals(-1, index);
	}

	@Test
	public void sort() {
		List<String> list = new LinkedList<String>();
		list.add("Strawberry");
		list.add("Papaya");
		list.add("Watermelon");
		list.sort(Comparator.naturalOrder());
		System.out.println(list);

		list.add("Grape");
		list.sort(Comparator.reverseOrder());
		System.out.println(list);
	}

	@Test
	public void stream() {
		int expectedSize = 2;
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");
		list = list.stream().filter(e -> e.length() > 6).collect(Collectors.toList());
		System.out.println(list);
		assertEquals(expectedSize, list.size());
	}

	@Test
	public void parallelStream() {
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");
		list.parallelStream().forEach(System.out::println);
		System.out.println("----------");
		list.parallelStream().forEachOrdered(System.out::println);
	}

	@Test
	public void subList() {
		int expectedSize = 2;
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");
		System.out.println(list);
		List<String> list2 = list.subList(0, 2);
		System.out.println(list2);

		assertEquals(expectedSize, list2.size());
	}

	@Test
	public void replaceAll() {
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");
		list.replaceAll(e -> e.toUpperCase());
		System.out.println(list);
	}

	@Test
	public void retainAll() {
		int expectedSize = 1;
		List<String> list = new LinkedList<String>();
		list.add("Papaya");
		list.add("Strawberry");
		list.add("Watermelon");

		List<String> list2 = new LinkedList<String>();
		list2.add("Papaya");
		list2.add("Lemon");
		list2.add("Mango");

		list.retainAll(list2);
		System.out.println(list);
		assertEquals(expectedSize, list.size());
	}
}

心得分享

Java LinkedList Example 每當添加元素時,上一個和下一個地址都會更改,維護插入順序,若需要訪問單個元素時,則會從頭開始循環訪問到該元素,提供了幾種 LinkedList 常見方法的操作範例, LinkedList Sort in Java 在應用上相當廣泛,熟悉這些方法的操作,並使用單元測試加以驗證,能夠建置穩定高效能的服務。

發佈留言