若是一個程序只包含固定數量且其生命週期都是已知的對象,那麼這是一個很是簡單的程序。java
1.泛型和類型安全的容器
- 經過使用泛型,能夠在編譯期防止將錯誤類型的對象放置到容器中.
2.基本概念
- Java容器類庫的用途是"保存對象",並將其劃分爲兩個不一樣的概念:Collection,Map.
- Collection:一個獨立元素的序列,這些元素都服從一條或多條規則.
- Map:一組成對的"鍵值對"對象,容許你使用鍵來查找值.
3.添加一組元素
- 在java.util包中的Arrays和Collections類中都有不少實用方法,能夠在一個Collection中添加一組元素.
4.容器的打印
- 默認的打印行爲(使用容器提供的toString()方法)便可生成可讀性很好的結果.
5.List
- List承諾能夠將元素維護在特定的序列中.List接口在Collection的基礎上添加了大量的方法,使得能夠在List的中間插入和移除元素.
- 有兩種類型的List:ArrayList,LinkedList.
- ArrayList:擅長於隨機訪問元素,可是在List的中間插入和移除元素時比較慢.
- LinkedList:在隨機訪問方面相對比較慢,可是它的特性集較ArrayList更大.
6.迭代器
- 任何容器類,都必須有某種方式能夠插入元素並將它們再次取回.
- 迭代器是一個對象,它的工做是遍歷並選擇序列中的對象,而客戶端程序員沒必要知道或關心該序列底層的結構.
- 迭代器一般被稱爲輕量級對象:建立它的代價小.
- ListIterator是一個更增強大的Iterator的子類型,它只能用於各類List的訪問.
7.LinkedList
- LinkedList也像ArrayList同樣實現了基本的List接口,可是它執行某些操做(在List的中間插入和移除)時比ArrayList更高效,但在隨機訪問操做方面卻要遜色一些.
- LinkedList還添加了可使其用做棧,隊列或雙端隊列的方法.
8.棧
- "棧"一般是指"後進先出"(LIFO)的容器.有時棧也被稱爲疊加棧.
- LinkedList具備可以直接實現棧的全部功能的方法,所以能夠直接將LinkedList做爲棧使用.
9.Set
- Set不保存重複的元素.
- Set具備與Collection徹底同樣的接口,所以沒有任何額外的功能.
- 實際上Set就是Collection,只是行爲不一樣.
- Set是基於對象的值來肯定歸屬性的(Set中最常被使用的是測試歸屬性:contains()).
10.Map
11.Queue
- Queue是一個典型的先進先出(FIFO)的容器.
- 隊列在併發編程中特別重要,由於它們能夠安全地將對象從一個任務傳輸到另外一個任務.
- LinkedList提供了方法以支持隊列的行爲,而且它實現了Queue接口,所以LinkedList能夠用做Queue的一種實現.
- PriorityQueue:優先級隊列聲明下一個彈出元素就是最須要的元素(具備最高的優先級).
12.Collection和Iterator
- Collection是描述全部序列容器的共性的跟接口,它可能會被認爲是一個"附屬接口",即由於要表示其餘若干個接口的共性而出現的接口.
- 容器之間的共性是經過迭代器達成的,而不是Collection來表示.可是,這個兩個方法綁定到了一塊兒,由於實現Collection就意味着須要提供iterator()方法.
13.Foreach與迭代器
- Java SE5引入了新的被稱爲Iterable的接口,該接口包含一個可以產生Iterator的iterator()方法,而且Iterable接口被foreach用來在序列中移動.
- 在Java SE5中,大量的類都是Iterable類型,主要包括全部的Collection類(可是不包括各類Map).
- 適配器方法的慣用法.
END程序員