LinkedList 浅析示例
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); } }