# Collection 介紹
程式中經常有將物件收集在一起以便管理使用的需求,
一個實作 Collection
介面的物件可以提供這種服務。
使用 Collection
的優點:
- 一致的 API
- 減少工作量
- 增進程式碼的速度跟質量
# Collection 架構圖
# List 介面
# ArrayList
- ArrayList 是基於動態陣列的資料結構
- ArrayList 有
get()
和 set()
方法,隨機訪問比較快 O(1)
- ArrayList 對新增和刪除操作
add()
和 remove()
操作需要移動資料 - ArrayList 浪費空間主要在於在
list
列表的結尾需要預留一定的容量空間
ArrayList演示 | public static void main(String[] args) { |
| |
| ArrayList<Integer> al = new ArrayList<Integer>(); |
| |
| |
| for (int i = 1; i <= 5; i++) |
| al.add(i); |
| |
| |
| System.out.println(al); |
| |
| |
| al.remove(3); |
| System.out.println(al); |
| |
| |
| for (int i = 0; i < al.size(); i++) |
| System.out.print(al.get(i) + " "); |
| } |
輸出 | [1, 2, 3, 4, 5] |
| [1, 2, 3, 5] |
| 1 2 3 5 |
# LinkedList
- LinkedList 是基於雙向連結串列的資料結構
- LinkedLsit 的訪問需要從頭開始移動指標
O(n)
- 對新增和刪除操作
add()
和 remove()
操作,LinkedList 更加快捷 - LinkedList 的空間花費體現在每一個元素消耗的空間比較大。
LinkedList演示 | public static void main(String[] args) { |
| |
| LinkedList<Integer> ll = new LinkedList<Integer>(); |
| |
| |
| for (int i = 1; i <= 5; i++) |
| ll.add(i); |
| |
| |
| System.out.println(ll); |
| |
| |
| ll.remove(3); |
| System.out.println(ll); |
| |
| |
| for (int i = 0; i < ll.size(); i++) |
| System.out.print(ll.get(i) + " "); |
| } |
輸出 | [1, 2, 3, 4, 5] |
| [1, 2, 3, 5] |
| 1 2 3 5 |
# Vector
| public static void main(String[] args){ |
| |
| Vector<Integer> v = new Vector<Integer>(); |
| |
| |
| for (int i = 1; i <= 5; i++) |
| v.add(i); |
| |
| |
| System.out.println(v); |
| |
| |
| v.remove(3); |
| System.out.println(v); |
| |
| |
| for (int i = 0; i < v.size(); i++) |
| System.out.print(v.get(i) + " "); |
| } |
輸出 | [1, 2, 3, 4, 5] |
| [1, 2, 3, 5] |
| 1 2 3 5 |
# Queue 介面
# Queue
| public static void main(String[] args){ |
| |
| Queue<Integer> q = new LinkedList<>(); |
| |
| |
| for (int i = 0; i < 5; i++) |
| q.add(i); |
| |
| |
| System.out.println("Elements of queue " + q ); |
| |
| |
| int removedele = q.remove(); |
| System.out.println("removed element: "+ removedele); |
| |
| System.out.println(q); |
| |
| |
| int head = q.peek(); |
| System.out.println("head of queue: " + head ); |
| |
| |
| int size = q.size(); |
| System.out.println("Size of queue: " + size ); |
| } |
| Elements of queue [0, 1, 2, 3, 4] |
| removed element-0 |
| [1, 2, 3, 4] |
| head of queue-1 |
| Size of queue-4 |
# PriorityQueue
| public static void main(String args[]){ |
| |
| PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>(); |
| |
| |
| pQueue.add(10); |
| pQueue.add(20); |
| pQueue.add(15); |
| |
| |
| System.out.println(pQueue.peek()); |
| |
| |
| System.out.println(pQueue.poll()); |
| |
| |
| System.out.println(pQueue.peek()); |
| } |