Java 持有對象(11)

若是一個程序只包含固定數量且其生命週期都是已知的對象,那麼這是一個很是簡單的程序。java

1.泛型和類型安全的容器

  • 經過使用泛型,能夠在編譯期防止將錯誤類型的對象放置到容器中.

2.基本概念

  • Java容器類庫的用途是"保存對象",並將其劃分爲兩個不一樣的概念:CollectionMap.
  • 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程序員

相關文章
相關標籤/搜索