- Java Collction 設計策略
- 具體的集合類
Java 采用如下策略:
Collection 是 Java Collection Framework 的 super interface.
Collection 核心方法:
public interface Collection<E> extends Iterable<E> { boolean add(E element); Iterator<E> iterator(); // other methods ...}public interface Iterable<E> { Iterator<E> iterator();}注:add() -- 增iterator() -- 迭代器可以完成:查、刪操作.
Iterator 定義:
public interface Iterator<E> { E next(); boolean hasNext(); void remove();}Iterator 用于 loop:
Collection<String> c = ...;Iterator<String> iter = c.iterator();while (iter.hasNext()) { String element = iter.next(); // do something with element}// Java SE 5.0 for-each loop// 任何實現了 Iterable 接口的對象一起工作,都支持 for-each 語法for (String element : c) { // do something with element}Full Java Collections:


通過測試代碼介紹 Java 核心的集合類的使用.
LinkedList 與 ListIteratorLinkedList: ordered collection(doubly linked list in Java). 它除了擁有普通型的迭代器,還擁有一個增強型迭代器(ListIterator).
ListIterator: 雙向迭代器,而且支持:add() 操作.
interface ListIterator<E> extends Iterator<E> { void add(E element); E PRevious(); boolean hasprevious();}測試代碼:
public class ListsTest { public static void main(String[] args) { List<String> staff = new LinkedList<String>(); staff.add("Amy"); staff.add("Bob"); staff.add("Carl"); System.out.println(staff); // [Amy, Bob, Carl] // 測試 iterator // ?。。。。〉鞯男袨榭梢韵胂笙拢汗鈽?|ABC A|BC AB|C ABC| Iterator<String> iter = staff.iterator(); // 要點1: 調用 remove() 必須調用 next()[next 和 remove 強關聯] // iter.remove(); // java.lang.IllegalStateException // 要點2: 禁止重復 remove() // iter.remove(); // iter.remove(); // java.lang.IllegalStateException // 要點3: 刪除操作 Iterator<String> iter2 = staff.iterator(); String first = iter2.next(); iter2.remove(); // 刪除第一個元素 String second = iter2.next(); iter2.remove(); // 刪除第二個元素 System.out.println(staff); // [Carl] // 測試 ListIterator ListIterator<String> listIter = staff.listIterator(); listIter.add("Tom"); listIter.add("Jerry"); listIter.next(); // skip past first element listIter.add("Juliet"); System.out.println(staff); // [Tom, Jerry, Carl, Juliet] while (listIter.hasNext()) { listIter.next(); } listIter.add("Jetty"); System.out.println(staff); // [[Tom, Jerry, Carl, Juliet, Jetty] }}ArrayListSetSet 兩個常用的實現: HashSet 和 TreeSet.TreeSet 的元素必須實現 Comparable, 或者初始化時 提供一個比較器。
Queue 和 DequeQueue: 隊列. 提供 add(offer), remove(poll), element(peek).Deque: 雙端隊列. 擴展自 Queue, 提供 head 和 tail 的add(offer), remove(poll), get(peek)操作.Deque的典型實現: ArrayDeque 和 LinkedList.
PriorityQueuePriorityQueue: 優先隊列,要求元素是 Comparable 或者提供 Comparator.
MapMap 的兩個常用實現: HashMap 和 TreeMap.Map 的三個視圖.
Set<K> keySet();Collection<V> values();Set<Map.Entry<K, V>> entrySet(); // Map 其實是利用Set 實現的,其實就是 元素是 Map.Entry 類型的 Set新聞熱點
疑難解答