LinkedList提供了將鏈接列表用作堆棧、隊列或雙端隊列的方法,這裡不再重復介紹 List的標准操作,只給出其獨特方法的使用。
請注意其已經實現的接口
Serializable, Cloneable, Iterable<E>, Collection<E>, Deque<E>, List<E>, Queue<E>
1.package collection.lession9;
2.
3.import java.util.Arrays;
4.import java.util.Iterator;
5.import java.util.LinkedList;
6.import java.util.List;
7.
8./**
9. * 老紫竹JAVA提高教程(6)-認識List列表之LinkedList<br>
10. * 實現了雙向隊列的控制,包括頭尾的操作<br>
11. * 可用於堆棧和FIFO操作等。 <br>
12. * <br>
13. * 相關API請查看 api.java2000.net/LinkedList
14. *
15. * @author 老紫竹 JAVA世紀網(java2000.net)
16. *
17. */
18.public class Lession9 {
19.
20. public static void main(String[] args) {
21. // 對於List的基礎操作,這裡不再重復
22. // 請自行查看介紹List的內容
23. // 這裡專注於LinkedList所引入的特性部分
24. //
25. LinkedList<String> list = new LinkedList<String>();
26. list.add("1111");
27. list.add("2222");
28. list.add("3333");
29.
30. showList(list); // [1111, 2222, 3333]
31.
32. // 在列表的最頭部增加一個
33. list.addFirst("head");
34. showList(list); // [head, 1111, 2222, 3333]
35.
36. // 測試反向的迭代器
37. // 正常的迭代器應該是從第一個數據開始
38. // 這個是從最後一個開始,這也是LinkedList的特點
39. Iterator<String> it = list.descendingIterator();
40. while (it.hasNext()) {
41. System.out.print(it.next() + ","); // 3333,2222,1111,head,
42. }
43. System.out.println();
44.
45. // 獲取列表的第一個數據,且繼續保留這個數據
46. // 內部都是 getFirst,無任何區別
47. System.out.println(list.element()); // head
48. System.out.println(list.getFirst()); // head
49. // 如果長度為0,會返回null,否則和getFirst相同
50. System.out.println(list.peek()); // head
51. System.out.println(list.peekFirst()); // head
52.
53. // 獲取列表的最後一個數據,且繼續保留這個數據
54. System.out.println(list.getLast()); // 3333
55. // 如果長度為0,會返回null,否則和getLast相同
56. System.out.println(list.peekLast()); // 3333
57.
58. // 在列表末尾增加一個數據
59. list.offer("tail");
60. showList(list); // [head, 1111, 2222, 3333, tail]
61.
62. // 在列表最前面增加一個數據
63. // 內部通過 addFirst 實現的
64. list.offerFirst("----");
65. showList(list); // [----, head, 1111, 2222, 3333, tail]
66.
67. // 在列表末尾增加一個數據
68. // 內部通過 addLast實現的
69. list.offerLast("====");
70. showList(list); // [----, head, 1111, 2222, 3333, tail, ====]
71.
72. // 獲取列表的第一個數據,並從刪除這個數據
73. System.out.println(list.poll()); // ----
74. System.out.println(list.pollFirst()); // head
75.
76. // 獲取列表的最後一個數據,並從刪除這個數據
77. System.out.println(list.pollLast()); // ====
78.
79. // 以堆棧的形式存入一個數據
80. // 將該元素插入此列表的開頭
81. // 內部通過 addFirst實現
82. list.push("xyz");
83. showList(list); // [xyz, 1111, 2222, 3333, tail]
84.
85. // 以堆棧的形式彈出一個數據
86. // 移除並返回第一個數據
87. // 內部通過 removeFirst 實現
88. System.out.println(list.pop()); // xyz
89. showList(list); // [1111, 2222, 3333, tail]
90.
91. // 刪除並返回第一個數據
92. System.out.println(list.removeFirst()); // 1111
93. showList(list); // [2222, 3333, tail]
94.
95. // 刪除列表中第一次出現的這個數據
96. // 內部通過 remove(Object)實現
97. System.out.println(list.removeFirstOccurrence("3333")); // true
98. showList(list); // [2222, tail]
99.
100. // 刪除並返回最後一個數據
101. System.out.println(list.removeLast()); // tail
102. showList(list); // [2222]
103.
104. // 刪除列表中最後一次出現的這個數據
105. System.out.println(list.removeLastOccurrence("2222")); // true
106. showList(list); // []
107.
108. }
109.
110. /**
111. * 顯示List裡面的數據。
112. *
113. * @param list
114. */
115. private static void showList(List list) {
116. System.out.println(Arrays.toString(list.toArray()));
117. }
118.}
運行結果
[1111, 2222, 3333]
[head, 1111, 2222, 3333]
3333,2222,1111,head,
head
head
head
head
3333
3333
[head, 1111, 2222, 3333, tail]
[----, head, 1111, 2222, 3333, tail]
[----, head, 1111, 2222, 3333, tail, ====]
----
head
====
[xyz, 1111, 2222, 3333, tail]
xyz
[1111, 2222, 3333, tail]
1111
[2222, 3333, tail]
true
[2222, tail]
tail
[2222]
true
[]
總結:
這個類具有很大的靈活性,也是常用的列表實現類之一。不多說了,總之必須掌握就 是了。