通過一個實例介紹 LinkedList 中常用API的用法

import java.util.List;
  2 import java.util.Iterator;
  3 import java.util.LinkedList;
  4 import java.util.NoSuchElementException;
  5 
  6 /*
  7  * @desc LinkedList測試程序。
  8  *
  9  * @author skywang
 10  * @email  [email protected]
 11  */
 12 public class LinkedListTest {
 13     public static void main(String[] args) {
 14         // 測試LinkedList的API
 15         testLinkedListAPIs() ;
 16 
 17         // 將LinkedList當作 LIFO(後進先出)的堆棧
 18         useLinkedListAsLIFO();
 19 
 20         // 將LinkedList當作 FIFO(先進先出)的隊列
 21         useLinkedListAsFIFO();
 22     }
 23     
 24     /*
 25      * 測試LinkedList中部分API
 26      */
 27     private static void testLinkedListAPIs() {
 28         String val = null;
 29         //LinkedList llist;
 30         //llist.offer("10");
 31         // 新建一個LinkedList
 32         LinkedList llist = new LinkedList();
 33         //---- 添加操作 ----
 34         // 依次添加1,2,3
 35         llist.add("1");
 36         llist.add("2");
 37         llist.add("3");
 38 
 39         // 將“4”添加到第一個位置
 40         llist.add(1, "4");
 41         
 42 
 43         System.out.println("\nTest \"addFirst(), removeFirst(), getFirst()\"");
 44         // (01) 將“10”添加到第一個位置。  失敗的話,拋出異常!
 45         llist.addFirst("10");
 46         System.out.println("llist:"+llist);
 47         // (02) 將第一個元素刪除。        失敗的話,拋出異常!
 48         System.out.println("llist.removeFirst():"+llist.removeFirst());
 49         System.out.println("llist:"+llist);
 50         // (03) 獲取第一個元素。          失敗的話,拋出異常!
 51         System.out.println("llist.getFirst():"+llist.getFirst());
 52 
 53 
 54         System.out.println("\nTest \"offerFirst(), pollFirst(), peekFirst()\"");
 55         // (01) 將“10”添加到第一個位置。  返回true。
 56         llist.offerFirst("10");
 57         System.out.println("llist:"+llist);
 58         // (02) 將第一個元素刪除。        失敗的話,返回null。
 59         System.out.println("llist.pollFirst():"+llist.pollFirst());
 60         System.out.println("llist:"+llist);
 61         // (03) 獲取第一個元素。          失敗的話,返回null。
 62         System.out.println("llist.peekFirst():"+llist.peekFirst());
 63     
 64 
 65         System.out.println("\nTest \"addLast(), removeLast(), getLast()\"");
 66         // (01) 將“20”添加到最後一個位置。  失敗的話,拋出異常!
 67         llist.addLast("20");
 68         System.out.println("llist:"+llist);
 69         // (02) 將最後一個元素刪除。        失敗的話,拋出異常!
 70         System.out.println("llist.removeLast():"+llist.removeLast());
 71         System.out.println("llist:"+llist);
 72         // (03) 獲取最後一個元素。          失敗的話,拋出異常!
 73         System.out.println("llist.getLast():"+llist.getLast());
 74 
 75 
 76         System.out.println("\nTest \"offerLast(), pollLast(), peekLast()\"");
 77         // (01) 將“20”添加到第一個位置。  返回true。
 78         llist.offerLast("20");
 79         System.out.println("llist:"+llist);
 80         // (02) 將第一個元素刪除。        失敗的話,返回null。
 81         System.out.println("llist.pollLast():"+llist.pollLast());
 82         System.out.println("llist:"+llist);
 83         // (03) 獲取第一個元素。          失敗的話,返回null。
 84         System.out.println("llist.peekLast():"+llist.peekLast());
 85 
 86          
 87 
 88         // 將第3個元素設置300。不建議在LinkedList中使用此操作,因爲效率低!
 89         llist.set(2, "300");
 90         // 獲取第3個元素。不建議在LinkedList中使用此操作,因爲效率低!
 91         System.out.println("\nget(3):"+llist.get(2));
 92 
 93 
 94         // ---- toArray(T[] a) ----
 95         // 將LinkedList轉行爲數組
 96         String[] arr = (String[])llist.toArray(new String[0]);
 97         for (String str:arr) 
 98             System.out.println("str:"+str);
 99 
100         // 輸出大小
101         System.out.println("size:"+llist.size());
102         // 清空LinkedList
103         llist.clear();
104         // 判斷LinkedList是否爲空
105         System.out.println("isEmpty():"+llist.isEmpty()+"\n");
106 
107     }
108 
109     /**
110      * 將LinkedList當作 LIFO(後進先出)的堆棧
111      */
112     private static void useLinkedListAsLIFO() {
113         System.out.println("\nuseLinkedListAsLIFO");
114         // 新建一個LinkedList
115         LinkedList stack = new LinkedList();
116 
117         // 將1,2,3,4添加到堆棧中
118         stack.push("1");
119         stack.push("2");
120         stack.push("3");
121         stack.push("4");
122         // 打印“棧”
123         System.out.println("stack:"+stack);
124 
125         // 刪除“棧頂元素”
126         System.out.println("stack.pop():"+stack.pop());
127         
128         // 取出“棧頂元素”
129         System.out.println("stack.peek():"+stack.peek());
130 
131         // 打印“棧”
132         System.out.println("stack:"+stack);
133     }
134 
135     /**
136      * 將LinkedList當作 FIFO(先進先出)的隊列
137      */
138     private static void useLinkedListAsFIFO() {
139         System.out.println("\nuseLinkedListAsFIFO");
140         // 新建一個LinkedList
141         LinkedList queue = new LinkedList();
142 
143         // 將10,20,30,40添加到隊列。每次都是插入到末尾
144         queue.add("10");
145         queue.add("20");
146         queue.add("30");
147         queue.add("40");
148         // 打印“隊列”
149         System.out.println("queue:"+queue);
150 
151         // 刪除(隊列的第一個元素)
152         System.out.println("queue.remove():"+queue.remove());
153     
154         // 讀取(隊列的第一個元素)
155         System.out.println("queue.element():"+queue.element());
156 
157         // 打印“隊列”
158         System.out.println("queue:"+queue);
159     }

160 }

Test "addFirst(), removeFirst(), getFirst()"llist:[10, 1, 4, 2, 3]llist.removeFirst():10llist:[1, 4, 2, 3]llist.getFirst():1Test "offerFirst(), pollFirst(), peekFirst()"llist:[10, 1, 4, 2, 3]llist.pollFirst():10llist:[1, 4, 2, 3]llist.peekFirst():1Test "addLast(), removeLast(), getLast()"llist:[1, 4, 2, 3, 20]llist.removeLast():20llist:[1, 4, 2, 3]llist.getLast():3Test "offerLast(), pollLast(), peekLast()"llist:[1, 4, 2, 3, 20]llist.pollLast():20llist:[1, 4, 2, 3]llist.peekLast():3get(3):300str:1str:4str:300str:3size:4isEmpty():trueuseLinkedListAsLIFOstack:[4, 3, 2, 1]stack.pop():4stack.peek():3stack:[3, 2, 1]useLinkedListAsFIFOqueue:[10, 20, 30, 40]queue.remove():10queue.element():20queue:[20, 30, 40]

LinkedList遍歷方式

(01) 第一種,通過迭代器遍歷。即通過Iterator去遍歷。

for(Iterator iter = list.iterator(); iter.hasNext();)
    iter.next();

(02) 通過快速隨機訪問遍歷LinkedList

int size = list.size();
for (int i=0; i<size; i++) {
    list.get(i);        
}

(03) 通過另外一種for循環來遍歷LinkedList

for (Integer integ:list) 
    ;

(04) 通過pollFirst()來遍歷LinkedList

while(list.pollFirst() != null)
    ;

(05) 通過pollLast()來遍歷LinkedList

while(list.pollLast() != null)
    ;

(06) 通過removeFirst()來遍歷LinkedList

try {
    while(list.removeFirst() != null)
        ;
} catch (NoSuchElementException e) {
}

(07) 通過removeLast()來遍歷LinkedList

try {
    while(list.removeLast() != null)
        ;
} catch (NoSuchElementException e) {
}

遍歷LinkedList時,使用removeFist()或removeLast()效率最高。但用它們遍歷時,會刪除原始數據;若單純只讀取,而不刪除,應該使用第3種遍歷方式。
無論如何,千萬不要通過隨機訪問去遍歷LinkedList!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章