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