1. 程式人生 > >Java程式設計思想 第十一章 持有物件(容器)

Java程式設計思想 第十一章 持有物件(容器)

1. 通過使用泛型,可以在編譯期防止將錯誤型別的物件放置到容器中

2. 容器分為兩個不同的型別

1. Collection:一個獨立元素的序列;打印出來是方括號;add();
    2.  add():確保這個Collection包含指定的元素
2. Map:一組成對的“鍵值對”物件,允許使用鍵來查詢值;打印出來是大括號;put();

3. 新增一組元素

1. Arrays.asList()方法接受一個數組或是一個用逗號分隔的元素序列,將其轉換為一個List物件
    注:該方法產生的List物件底層和陣列是共享記憶體的,即其實際上是一個物件
2. Collections.addAll()方法接受一個Collection物件,以及一個數組或是一個用逗號分隔的元素序列,將元素新增到Collection中

4. List的行為根據equals()的行為而有所變化(兩個String只有在內容完全一樣的情況下才會是等價的);subList()所產生的列表的幕後就是初始化列表,對所有的列表的修改都會反映到出事列表中;

5. 迭代器Iterator:next(),hasNext(),remove();單向移動;ListIterator雙向移動

6. LinkedList

1. 得到首元素:getFirst(),element(),peek()
2. 移除首元素:remove(),removeFirst(),poll()
3. 增加首元素:addFirst()
4. 增加尾元素:add(),offer(),addLast(),removeLast()

7. TextFile:繼承自List,其構造器將開啟檔案

8. PriorityQueue:優先順序佇列,預設使用物件在佇列中的自然順序;通過提供自己的Comparator來修改這個順序

9. 當要實現一個不是Collection的外部類的時候,使用Iterator更好;而當是Collection(Iterable型別),使用foreach

10. 任何實現Iterable的類都可以將它用於foreach語句中

11. 當有一個介面並需要另一個介面的時候,編寫介面卡可以解決問題

12. Iterable介面只需實現iterator()方法;Iterator必須實現hasNext()和next()

13. Arrays.asList()產生的List物件會使用底層陣列作為其物理實現,只要你執行的操作會修改這個List,並且你不想原來的陣列被修改,那麼你就應該在另一個容器中建立一個副本

14. 容器總結

  1. 容器不能持有基本型別,自動包裝機制會仔細的執行基本型別到容器中所持有的包裝器型別之間的雙向轉換
  2. List
    1. ArrayList:適合進行大量的隨機訪問
    2. LinkedList:適合從表中間插入或者刪除元素
  3. 各種Queue以及棧的行為,由LinkedList提供支援
  4. Map
    1. HashMap:用來快速訪問
    2. TreeMap:保持“鍵”始終處於排序狀態,沒有HashMap快
    3. LinkedHashMap:保持元素插入的順序,通過雜湊提供快速訪問能力
  5. Set
    1. HashSet:提供最快的查詢速度
    2. TreeSet:保持元素處於排序狀態
    3. LinkedHashSet:以插入順序保持元素
  6. Map和Collection之間的唯一重疊就是Map可以使用entrySet()和values()方法來產生Collection