package com.smbea.demo; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; /** * 1、繼承自接口 List、Deque、Cloneable、Serializable; * 2、實現自類 AbstractSequentialList; * 3、由於繼承自抽象類 AbstractSequentialList,故此元素是有順序的; * 4、增刪操作由於要移動元素,故此增刪比較慢; * 5、查詢操作由於采用的是索引,故此查詢比較快; * 6、非線程安全的-輕量級; * 7、由於實現了接口 Deque,故此不僅可以從前往後查詢元素,也可以從後向前查詢元素; * 8、由於實現了接口 Cloneable,故可以復制 LinkedList; * 9、由於實現了接口 Serializable,故可以被序列化 * @author hapday */ public class LinkedListDemo { public static void main(String[] args) { elementRepeatableTest(); elementSequentialTest(); } /** * 驗證【元素可重復】 */ public static void elementRepeatableTest() { List<String> chineseList = new LinkedList<String> (); chineseList.add("甲"); chineseList.add("乙"); chineseList.add("乙"); chineseList.add("丙"); chineseList.add("丁"); List<String> englishList = new LinkedList<String> (); englishList.add("A"); englishList.add("B"); englishList.add("B"); englishList.add("C"); englishList.add("D"); ListIterator<String> chineseIterator = chineseList.listIterator(); // 支持逆序迭代 Iterator<String> englishIterator = englishList.iterator(); // 只支持順序迭代 System.out.println("*** 順序輸出 ***"); while(chineseIterator.hasNext()){ System.out.print(chineseIterator.next() + " - "); } System.out.println("\n*** 逆序輸出 ***"); while(chineseIterator.hasPrevious()) { System.out.print(chineseIterator.previous() + " - "); } System.out.println("\n*** chineseList 間隔插入 englishList 中的元素 ***"); while(englishIterator.hasNext()){ if(chineseIterator.hasNext()){ chineseIterator.next(); } chineseIterator.add(englishIterator.next()); // chineseList 間隔插入 englishList 中的元素 } System.out.println(chineseList); englishIterator = englishList.iterator(); System.out.println("\n*** englishList 每隔兩個元素刪除前一個元素 ***"); while(englishIterator.hasNext()){ englishIterator.next(); if(englishIterator.hasNext()){ englishIterator.next(); englishIterator.remove(); // remove() 方法和 next() 是成對出現的,並且每次刪除的都是 next() 的前一個元素 } } System.out.println(englishList); System.out.println("\n*** 從 chineseList 中移除 englishList 的元素 ***"); chineseList.removeAll(englishList); System.out.println(chineseList); } /** * 【元素有順序】 */ public static void elementSequentialTest() { List<Integer> list = new LinkedList<Integer> (); for(int index = 1; index <= 100000; index++){ list.add(index); // 加入 10 萬的元素 } boolean exists = true; // 是否存在:true-存在;false-不存在 int current = 0; // 當前元素 int previous = 0; // 上一個元素 Iterator<Integer> iterator = list.iterator(); while(iterator.hasNext()){ current = iterator.next(); if(current < previous){ exists = false; } previous = current; } System.out.println("\n*** 元素有順序 ***"); System.out.print("是否有順序:" + exists); } }