對象的集合

如果程序只包含固定數量的對象,並且其生命週期都已知,那麼這個程序就實在太簡單了。
通常,你的程序會根據運行時才知道的條件創建新對象。不到運行期,不會知道所需對象
的數量,甚至不知道確切的類型。爲解決這個普遍的編程問題,需要能夠在任意時刻,任
意位置,創建任意數量的對象。所以,你就不能指望創建具名的引用來持有每一個對象:
MyObject myReference;
因爲你不知道實際上會需要多少這樣的引用。
大多數語言都提供了某種方法來解決這個基本問題。Java 有多種方式保存對象(應該說是
對象的引用 reference)。例如前面曾經學習過的數組,它是語言內置的類型。Java 實用
類庫還提供了一套相當完整的容器類(也稱爲集合類,但由於 Java 2 的類庫中使用了
Collection 來指代該類庫的一個特殊子集,所以我使用“容器”稱呼它們)。容器提供了
近乎完美的方式來保存和操縱對象。

只有三種容器:Map,List 和 Set,它
們各有兩到三個實現版本。常用的容器用黑色粗線框表示。看到這裏,容器應該沒有那麼
可怕了吧。

 

回顧一遍 Java標準類庫提供的容器:
1.   數組將數字與對象聯繫起來。它保存類型明確的對象,查詢對象時,不需要對
結果做類型轉換。它可以是多維的,可以保存基本類型的數據。但是,數組
一旦生成,其容量就不能改變。
2. Collection 保存單個的元素,而 Map 保存相關聯的鍵值對。 
3. 像數組一樣,List 也建立數字與對象的關聯,可以認爲數組和 List 都是排好序
的容器。List能夠自動擴充容量。但是List不能保存基本類型,只能保存Object的引用,

因此必須對從容器中取出的 Object 結果做類型轉換。
4. 如果要進行大量的隨機訪問,就使用 ArrayList;如果要經常從 List中間插入或
刪除元素,則應該使用 LinkedList。
5.   隊列、雙向隊列以及棧的行爲,由 LinkedList提供支持。
6. Map 是一種將對象與對象相關聯的設計。HashMap着重於快速訪問;TreeMap
保持“鍵”始終處於排序狀態,所以沒有 HashMap 快。LinkedHashMap 保
持元素插入的順序,也可以使用 LRU算法對其重排序。
7. Set不接受重複元素。HashSet提供最快的查詢速度,TreeSet保持元素處於排
序狀態。LinkedHashSet以插入順序保存元素。
8. 新程序中不應該使用過時的 Vector、Hashtable和 Stack。
容器是你每天都會用到的工具,它可以使你的程序更簡潔、更強大、更高效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章