1 / 52

第 17 章 Java 的集合物件

第 17 章 Java 的集合物件. 17-1 集合物件的基礎 17-2 實作 Set 介面的集合類別 17-3 實作 List 介面的集合類別 17-4 實作 Map 介面的集合類別 17-5 輸出集合物件的元素. 17-1 集合物件的基礎. 17-1-1 Java Collections Framework 17-1-2 集合介面 17-1-3 泛型 Java 的集合物件. 17-1-1 Java Collections Framework- 說明.

scott
Télécharger la présentation

第 17 章 Java 的集合物件

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第17章 Java的集合物件 • 17-1 集合物件的基礎 • 17-2 實作Set介面的集合類別 • 17-3 實作List介面的集合類別 • 17-4 實作Map介面的集合類別 • 17-5 輸出集合物件的元素

  2. 17-1 集合物件的基礎 • 17-1-1 Java Collections Framework • 17-1-2 集合介面 • 17-1-3 泛型Java的集合物件

  3. 17-1-1 Java Collections Framework-說明 • 「集合物件」(Collections)是指一組相關的物件集合,將這組物件集合視為單一物件,在集合物件中的物件稱為「元素」(Elements),集合物件有很多種,其儲存的元素可能允許重複,有些集合物件的元素會進行排序,在舊版Java技術是指Vector和Hashtable物件。

  4. 17-1-1 Java Collections Framework-架構1 • JDK 1.2之後的版本提供全新的集合物件架構,稱為Java Collections Framework,這是用來儲存和處理集合物件的統一軟體架構,其組成如下所示: • 集合介面(Collection Interface):一組定義完善的Java介面,提供處理集合物件的標準介面,其目的是讓集合物件擁有一致的操作方式,包含:Collection、Set、SortedSet、List、Map和SortedMap介面。

  5. 17-1-1 Java Collections Framework-架構2 • 實作(Implementations):實作集合介面的類別,稱為「具體類別」(Concrete Class),對比抽象類別,這是可以使用new運算子建立實例的類別,以實作的集合介面來區分,常用的介面如下表所示:

  6. 17-1-1 Java Collections Framework-架構3 • 演算法(Algorithms):當物件實作集合介面,其實作的一些多形方法,可以執行集合物件元素的搜尋與排序等演算法。

  7. 17-1-2 集合介面-說明 • 集合介面(Collection Interface)是用來處理集合物件中儲存的物件,提供一致的物件操作方式來新增、刪除和搜尋元素的方法,這是一個介面型態的類別架構,其根介面是:Collection和Map介面。

  8. 17-1-2 集合介面-Collection集合介面(圖例) • Collection介面的擁有Set和List子介面,Set介面擁有SortedSet子介面,介面的繼承架構,如右圖所示:

  9. 17-1-2 集合介面-Collection集合介面(介面說明) • Collection介面:類別架構的根介面,不過並沒有任何類別直接實作Collection介面,Java Collections Framework的具體類別(Concrete Class)都是實作其子介面。 • Set介面:實作Set介面的集合物件,其儲存元素沒有重複元素。 • List介面:實作List介面的集合物件可以擁有重複元素,元素是以循序方式存入,可以使用類似陣列索引方式來存取元素。 • SortedSet介面:Set介面的子介面,實作SortedSet介面的集合物件,其儲存元素不只沒有重複,而且是從小到大進行排序。

  10. 17-1-2 集合介面-Map集合介面(圖例) • Map介面並不是Collection介面的子介面,Map介面是一種特殊的Set介面,儲存的資料是一組對應元素,擁有子介面SortedMap,介面繼承架構,如右圖所示:

  11. 17-1-2 集合介面-Map集合介面(介面說明) • Map介面:實作Map介面的集合物件並沒有重複元素,儲存的元素是一對:鍵值(Key)和值(Value),這是一種單方向的對應,鍵值可以對應其值,例如:網域名稱對應IP位址。 • SortedMap介面:對應SortedSet介面的Map介面子介面,實作SortedMap介面的集合物件,其儲存元素沒有重複,而且是以鍵值由小到大進行排序。

  12. 17-1-3 泛型Java的集合物件-說明 • 「泛型Java」(Generic Java)是JDK 5.0版在Java語法上的重大變革,提供類似C++語言的「樣版」(Templates)語法,新增編譯階段的集合物件型態檢查功能,可以減少程式碼中取出元素所需的大量型態轉換。

  13. 17-1-3 泛型Java的集合物件-泛型型態 • 泛型Java可以使用「泛型型態」(Generic Types)來擴充Java語言,簡單的說,就是在建立集合物件時,以泛型型態指定集合物件儲存元素的資料型態,如下所示: HashSet<Byte> hset = new HashSet<Byte>(); HashSet<Float> hset = new HashSet<Float>(); HashSet<String> hset = new HashSet<String>(); • 使用”<”和”>”括起資料型態就是泛型型態,它是用來指定集合物件儲存元素的資料型態。

  14. 17-2 實作Set介面的集合類別 • 17-2-1 Set介面的基礎 • 17-2-2 HashSet類別 • 17-2-3 TreeSet類別

  15. 17-2 實作Set介面的集合類別 • Set介面是Collection介面的子介面,實作Set介面的集合物件,其儲存元素並沒有重複,如果是實作子介面SortedSet的集合物件,儲存的就是排序元素。

  16. 17-2-1 Set介面的基礎-說明 • Set介面繼承Collection介面的所有方法,只是規範建構子和某些方法,以滿足其儲存元素不能重複。

  17. 17-2-1 Set介面的基礎-介面方法

  18. 17-2-2 HashSet類別-說明 • HashSet類別實作Set介面,繼承Collection介面的方法,使用「雜湊表」(Hash Table)演算法來改進新增、刪除和存取集合物件元素的執行效率,其儲存元素的排列和插入順序不同,也不保證擁有固定的排列順序。

  19. 17-2-2 HashSet類別-建立物件 • HashSet類別提供數種過載建構子,在Java程式建立HashSet物件,如下所示: HashSet<String> hset = new HashSet<String>(); • 上述程式碼建立儲存字串元素的HashSet物件,泛型型態為String。

  20. 17-2-2 HashSet類別-建構子 • 過載建構子的說明,如下表所示:

  21. 17-2-3 TreeSet類別-說明 • TreeSet類別實作SortedSet介面,這是Set介面的子介面,其儲存元素不只沒有重複,而且由小到大進行排序,這是一種「排序集合物件」(Sorted Collection)。

  22. 17-2-3 TreeSet類別-建立物件 • TreeSet類別提供數種過載建構子,在Java程式建立TreeSet物件,如下所示: TreeSet<String> tset = new TreeSet<String>(); • 上述程式碼建立儲存字串元素的TreeSet物件。

  23. 17-2-3 TreeSet類別-建構子 • 過載建構子的說明,如下表所示:

  24. 17-2-3 TreeSet類別-介面方法 • TreeSet類別實作SortedSet介面,除了繼承Set介面的方法外,其新增的介面方法,如下表所示:

  25. 17-3 實作List介面的集合類別 • 17-3-1 List介面的基礎 • 17-3-2 ArrayList類別 • 17-3-3 LinkedList類別

  26. 17-3-1 List介面的基礎-說明 • List介面也是繼承自Collection介面,實作此介面的集合類別是一種「循序集合物件」(Ordered Collection),允許儲存重複元素,而且元素擁有索引位置,可以使用類似陣列索引方式來存取元素。 • 「循序集合物件」(Ordered Collection)和「排序集合物件」(Sorted Collection)並不相同,循序集合物件如同陣列是以元素位置的索引來排列;排序集合物件是以元素值的大小進行排序。

  27. 17-3-1 List介面的基礎-介面方法

  28. 17-3-2 ArrayList類別-說明 • ArrayList類別實作List介面,儲存元素的方式類似陣列,元素使用索引位置依序存入,只需將元素新增或插入ArrayList物件,並不用事先宣告物件的尺寸,如同一個可調整陣列尺寸的動態陣列。

  29. 17-3-2 ArrayList類別-建立物件 • 在Java程式建立ArrayList物件,如下所示: ArrayList<String> alist = new ArrayList<String>(); • 上述程式碼使用建構子建立ArrayList物件儲存字串元素,泛型型態是String。

  30. 17-3-2 ArrayList類別-建構子 • 過載建構子的說明,如下表所示:

  31. 17-3-2 ArrayList類別-介面方法 • ArrayList物件除了實作List介面的方法外,還新增一些方法,其說明如下表所示:

  32. 17-3-2 ArrayList類別-範例 • 在新增ArrayList物件的元素後,Java程式可以使用for迴圈配合索引取得每一個物件元素,如下所示: for ( int i = 0; i < alist.size(); i++ ) System.out.print(alist.get(i)+" "); • 程式碼使用size()方法取得元素數,get()方法配合索引位置取出ArrayList物件的元素。

  33. 17-3-3 LinkedList類別-說明 • LinkedList類別是實作List介面,這是類似「鏈結串列」(Linked Lists)資料結構的類別,各節點如同火車掛車廂一般,將每一個車廂的節點連接起來,如下圖所示:

  34. 17-3-3 LinkedList類別-建構子 • LinkedList類別提供方法可以在串列的頭和尾取出和刪除元素,在Java程式只需使用建構子就可建立LinkedList物件,過載建構子的說明,如下表所示:

  35. 17-3-3 LinkedList類別-方法 • LinkedList物件除了實作List介面的方法外,新增方法的說明,如下表所示:

  36. 17-4 實作Map介面的集合類別 • 17-4-1 Map介面的基礎 • 17-4-2 HashMap類別 • 17-4-3 TreeMap類別

  37. 17-4-1 Map介面的基礎-說明 • Map介面是類別架構的根介面,擁有子介面SortedMap介面,實作Map介面的集合類別,其儲存物件共有2個:鍵值(Key)和對應值(Value)的物件,其中鍵值不可重複,一個鍵值對應一個值。

  38. 17-4-1 Map介面的基礎-介面方法

  39. 17-4-2 HashMap類別-說明 • HashMap類別實作Map介面,相當於是舊版的Hashtable類別,其儲存元素有2個:key鍵值和其對應值,允許儲存null值。 • HashMap類別提供數種過載的建構子,在Java程式建立HashMap物件,如下所示: HashMap<String,String> hmap = new HashMap<String,String>(); • 程式碼建立HashMap物件,因為儲存元素有鍵值和對應值,所以指定2個泛型型態。

  40. 17-4-2 HashMap類別-建構子 • 過載建構子的說明,如下表所示:

  41. 17-4-3 TreeMap類別-說明 • TreeMap類別實作SortedMap介面,SortedMap介面是Map介面的子介面,實作此介面的集合物件是以鍵值由小到大進行排序。 • 在Java程式建立String資料型態的TreeMap物件,如下所示: TreeMap<String,String> tmap = new TreeMap<String,String>();

  42. 17-4-3 TreeMap類別-建構子 • 過載建構子的說明,如下表所示:

  43. 17-4-3 TreeMap類別-介面方法 • TreeMap類別實作SortedMap介面,除了繼承Map介面的方法外,其新增的介面方法,如下表所示:

  44. 17-5 輸出集合物件的元素 • 17-5-1 Iterator介面輸出元素 • 17-5-2 ListIterator介面輸出元素

  45. 17-5-1 Iterator介面輸出元素-說明 • Iterator介面改進舊版Java技術的Enumeration介面,提供一致方法來走訪集合物件的元素或刪除元素,因為Collections集合物件已經實作Iterator介面,換句話說,只需使用Collection、Set和List介面的iterator()方法,就可以取得Iterator<E>介面的物件,如下表所示:

  46. 17-5-1 Iterator介面輸出元素-範例 • 例如:HashSet<String>物件hset可以使用上表方法取得Iterator介面物件,如下所示: Iterator<String> iterator = hset.iterator(); • 上述程式碼是將HashSet物件的元素轉換成Iterator<E>介面物件,泛型型態為String,現在我們只需呼叫介面方法,就可以依序走訪和刪除元素。

  47. 17-5-1 Iterator介面輸出元素-介面方法 • 在取得Iterator<E>介面物件後,即可配合while迴圈走訪集合物件的元素,如下所示: while (iterator.hasNext()) System.out.print(" "+iterator.next()); • 上述程式碼使用hasNext()方法檢查是否有下一個元素,如果有,使用next()方法取得此元素。

  48. 17-5-2 ListIterator介面輸出元素-說明 • 實作List介面的集合物件除了可以使用Iterator介面外,還可以使用ListIterator介面,這是Iterator介面的子介面,除了可以使用一致的走訪方法外,還可以雙向走訪集合物件的元素,即從頭到尾,或是從尾到頭的走訪。

  49. 17-5-2 ListIterator介面輸出元素-取得介面物件 • List介面物件listIterator()方法,可以取得ListIterator<E>介面物件,如下表所示:

  50. 17-5-2 ListIterator介面輸出元素-範例 • 例如:ArrayList<String>物件alist可以使用上表方法取得ListIterator介面物件,如下所示: ListIterator<String> iterator = alist.listIterator(0); • 上述程式碼是將ArrayList物件的元素轉換成ListIterator<E>介面物件,泛型型態為String,然後就可以使用介面方法雙向走訪、新增、取代和刪除元素。

More Related