在Java當中的資料型態Set 以及Map,以及Linked List 跟ArrayList的差別
首先我先列出Collection 跟Map的大致架構
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
- Collection 為基本的介面, 定義了一些基礎操作,
一個 collection代表一組物件 (objects). 有些物件可以重複有些不行. 有些可以排序有些不行.
不過基本上又分做兩類, 一個是 List一個是 Set.
- List 為有順序性的 Collection,
也因此允許重複的物件存於其中.
- LinkedList 繼承 List, 他是雙向的 List(
FIFO, FILO), 也因此可透過他實作 Stack, Queue,不過 LinkedList並沒有使用 synchro nize方式存取.
可用此方式操作 List list = Collections.synchronizedList( new LinkedList());
- ArrayList 實作了 List, 然而也提供了動態陣列大小的操作 (
這邊我自己覺得有點類似C++的動態陣列),如 size, isEmpty, get, set, iterator, listIterator operations均是常數時間,然而add則是O(n).
同樣他也是沒有使用synchronize方式存取.
- Vector 跟 ArrayList類似,
不過他是有進行同步處理的,因此要處理 ConcurrentMo dificationException,此exception.
- Stack 繼承 Vector, 並且提供了一些額外的方法,
如 peek.
- Set 不能包含重複的物件, 即是兩個物件 objec1, object2同時存在此set的話, 則o1.equals(o2)則為false.
- Map 提供Key->Value的對應關係, key不能重複,
一個 key對應一個 value(object), 這邊我們常用所謂的 keySet(), 就是代表 Map當中的 key只能唯一.
- HashTable 實作了 Map,提供了 Key->
Value的方式, 而且他是同步(synchronize)的!
- HashMap 跟 HashTable類似, 不過他是非同步可進行存取的.
- WeakHashMap 跟 HashMap類似,
如果他其中的 key不再被引用,他將會被回收.
如果要使用 Stack, Queue等實作, 若要快速插入, 刪除元件,應該使用 LinkedList, 若要快速存取其中物件,應該使用 ArrayList.
而若沒有同步存取問題, 可以使用非同步的型態如 HashMap, 如果有就要用同步的資料型態.
沒有留言:
張貼留言