第十四章: Collections 集合物件與資料結構

27
第第第第Collections 第第第第第第第 第第 第第第第第第第 ……………… .. 第第 Set 第第第第第第第 …… .. 第第 List 第第第第第第第 ..…… 第第 Map 第第第第第第第 …… .. Collections 第第第第第第第 … .. 第第 Collections 第第第第第第第第

description

第十四章: Collections 集合物件與資料結構. *集合物件的基礎 ……………….. *實作 Set 介面的集合類別 …….. *實作 List 介面的集合類別 ..…… *實作 Map 介面的集合類別 …….. * Collections 物件與資料結構 ….. *使用 Collections 物件實作類別關係. 14-1 集合物件的基礎 ◎ Java Collections Framework. - PowerPoint PPT Presentation

Transcript of 第十四章: Collections 集合物件與資料結構

Page 1: 第十四章: Collections 集合物件與資料結構

第十四章: Collections 集合物件與資料結構

*集合物件的基礎 ……………… ..

*實作 Set 介面的集合類別 …… ..

*實作 List 介面的集合類別 ..……

*實作 Map 介面的集合類別 …… ..

* Collections 物件與資料結構 … ..

*使用 Collections 物件實作類別關係

Page 2: 第十四章: Collections 集合物件與資料結構

14-1 集合物件的基礎◎Java Collections Framework

「集合物件」( Collections )是指一組相關的物件集合,將這組物件集合視為單一物件,在集合物件中的物件稱為「元素」。

組成架構: *集合介面 *實作 *演算法

介面 具體類別Set HashSet

SortedSet TreeSet

List ArrayList 、 LinkedList 、 Vector

Map HashMap 、 Hashtable

SortedMap TreeMap

Page 3: 第十四章: Collections 集合物件與資料結構

14-1 集合物件的基礎◎集合介面

Collection 集合介面 Map 集合介面<<interface>>

Collection

<<interface>>List

<<interface>>Set

<<interface>>SortedSet

<<interface>>SortedMap

<<interface>>Map

Page 4: 第十四章: Collections 集合物件與資料結構

14-2 實作 Set 介面的集合類別◎ Set 介面的基礎

儲存元素沒有重複的元件 ; Set 介面繼承 Collections 介面的所有方法

Set介面方法 說明boolean isEmpty( ) 檢查集合物件是否是空的,傳回 ture 為是Int size( ) 傳回集合物件目前的元素數boolean add(Object) 新增參數 Object 的元素,成功傳回 true

boolean addAll(Collection)

將參數 Collection 集合物件的元素都新增為元素,成功傳回 true

boolean remove(Object) 刪除參數 Object 的元素,如果成功表示擁有此元素,傳回 true

boolean removeAll(Collection)

刪除集合物件中擁有參數 Collection 集合物件的元素,成功傳回 true

boolean retainAll(Collection)

保留集合物件中擁有參數 Collection 集合物件的元素,成功傳回 true

void clear( ) 清除集合物件的所有元素boolean contains(Object)

檢查集合物件中是否擁有參數 Object 的元素,如果有傳回 true

boolean containsAll(Collection)

檢查集合物件中是否有參數 Collection 集合物件的元素,如果有傳回 true

Page 5: 第十四章: Collections 集合物件與資料結構

14-2 實作 Set 介面的集合類別◎ HashSet 類別—實作 Set 介面

HashSet 類別是實作 Set 介面,繼承 Collection 介面的方法,使用「雜湊表」( Hash Table )演算法來改進新增、刪除和存取集合物件元素。

儲存元素的排列和插入順序不同=>不固定的排列順序。 建立 HashSet 物件:  HashSet hset = new HashSet( );

ch14_2_2

建構子 說明HashSet( ) 建立一個空的 HashSet 的物件,預設的元素數是 16

HashSet(int) 見利空的 HashSet 物件,可以指定參數 int 的元素數HashSet(Colletion) 使用參數 Colletion 物件的元素建立 HashSet 物件

Page 6: 第十四章: Collections 集合物件與資料結構

14-2 實作 Set 介面的集合類別◎ TreeSet 類別—實作 SortedSet 介面

TreeSet 類別實作 SortedSet 介面,是 Set 介面的子介面。 元素沒有重複,由小到大排序=>排序集合物件。 建立 TreeSet 物件: TreeSet tset = new TreeSet( );

建構子 說明TreeSet( ) 建立一個空的 TreeSet 物件,使用元素自然比較

的大小來進行排序,例如 : 英文字母的大小TreeSet(Collection) 使用參數 Collection 物件的元素建立 TreeSet 物

件TreeSet(Comparator c) 建立空的 TreeSet 物件,以參數 Comparator 比

較物件來進行排序TreeSet(SortedSet) 使用參數實作 SortedSet 介面的物件來建立 Tre

eSet 物件,其排序方式和參數相同

Page 7: 第十四章: Collections 集合物件與資料結構

14-2 實作 Set 介面的集合類別◎ TreeSet 類別—實作 SortedSet 介面SortedSet介面方法 說明 Ch14_2_3

Object first( ) 傳回集合物件的第一個元素

Object last( ) 傳回集合物件的最後一個元素

SortedSet headSet(Object) 傳回小於參數 Object 元素的部份 TreeSet 物件

SortedSet subSet(Object1,object2)

傳回大於等於參數 Object1 元素,到小於 Object2 元素的部份 TreeSet 物件

SortedSet tailSet(Object) 傳回大於等於參數 Object 元素的部份 TreeSet 物件

Page 8: 第十四章: Collections 集合物件與資料結構

14-3 實作 List 介面的集合類別◎ List 介面的基礎

List 介面也是繼承自 Collection 介面=>循序集合物件。

允許重複元素。 元素擁有索引位置。(類似陣列索引方式來

存取元素) 循序與排序的不同: 循序:如同陣列【元素位置以索引來排列】 排序:以元素的大小進行排列。

Page 9: 第十四章: Collections 集合物件與資料結構

14-3 實作 List 介面的集合類別◎ List 介面的基礎

List介面方法 說明

void add(int,Object) 在參數 int 位置插入 Object 元素,索引位置是從 0 開始

boolean addAll(int,Collection) 在參數 int 位置插入 Collection 集合物件的所有元素,成功傳回 true

Object get(int index) 傳回參數 int 位置的元素int indexOf(Object) 搜尋參數 Object 的元素,傳回值是第 1 個

找到元素的位置,如果沒有找到傳回 -1

int lastIndexOf(Object) 反向搜尋參數 Object 的元素,傳回值是最後 1 個找到元素的位置,如果沒找到傳回 -1

Object remove(int) 刪除參數 int 位置的元素Object set(int,Object) 將參數 int 位置的元素取代成參數 Object ,

傳回集合物件被取代的元素List subList(int,int) 傳回從第 1 個參數 int( 包含 ) 到第 2 個參數 i

nt( 不包含 ) 間的子集合

Page 10: 第十四章: Collections 集合物件與資料結構

14-3 實作 List 介面的集合類別◎ ArrayList 類別

ArrayList 類別實作 List 介面。 儲存元素的方式類似陣列。【索引】 元素新增或插入 ArrayList 物件,並不用事先

宣告物件的尺寸。【動態陣列】 建立 ArrayList 的物件: ArrayList alist = new ArrayList()

Page 11: 第十四章: Collections 集合物件與資料結構

14-3 實作 List 介面的集合類別◎ ArrayList 類別

建構子 說明ArrayList( ) 建立一個空的 ArrayList 物件ArrayList(Collection) 使用參數 Collection 物件的元素建立 ArrayList 物件ArrayList(int) 建立一個空的 ArrayList 物件,參數 int 指定初始容量

的元素數

方法 說明 Ch14_3_1

void ensureCapcity(int) 指定 ArrayList 物件的容量,保證擁有參數 int的最小元素數

void trimToSize() 將 ArrayList 物件的容量剪裁成目前尺寸的元素數

Page 12: 第十四章: Collections 集合物件與資料結構

14-3 實作 List 介面的集合類別◎ LinkedList 類別

LinkedList 類別實作 List 介面。

鏈結串列。

first null

建構子 說明LinkedList( ) 建立一個空的 LinkedList 物件LinkedList(Collection) 使用參數 Collection 物件的元素建立 LinkedList 物

Page 13: 第十四章: Collections 集合物件與資料結構

14-3 實作 List 介面的集合類別◎ LinkedList 類別

方法 說明 Ch14_3_3

void addFirst(Object) 在 LinkedList 物件的開頭插入元素void addLast(Object) 在 LinkedList 物件的結尾新增元素Object getFirst() 傳回 LinkedList 物件的第 1 個元素Object getLast() 傳回 LinkedList 物件的最後 1 個元素Object removeFirst() 刪除 LinkedList 物件的第 1 個元素,傳回刪除的

元素Object removeLast() 刪除 LinkedList 物件的最後 1 個元素,傳回刪除

的元素

Page 14: 第十四章: Collections 集合物件與資料結構

14-4 實作 Map 介面的集合類別◎ Map 介面的基礎

Map 介面並不是擴充自 Collection 介面。 獨立類別架構的根介面。 屬於一種儲存「鍵值結合」元素的集合物件。 儲存物件共有兩個:鍵值( Key )、對應值

( Value ) Key :不可重複 Value :一個鍵值對應一個值

Page 15: 第十四章: Collections 集合物件與資料結構

14-4 實作 Map 介面的集合類別◎ Map 介面的基礎

Set介面方法 說明boolean isEmpty( ) 檢查集合物件是否空的,傳回 true 為是int size( ) 傳回集合物件目前的元素數Object put(Object key,

Object value)

新增參數 key 的鍵值和 value 值的元素,如果相同的 key 鍵值存在,就是取代 value 值

void putAll(Map) 新增參數 Map 集合物件的元素,成功傳回 true

Object remove(Object key)

刪除參數 key 鍵值的元素,如果 key 鍵值不存在,傳回 null ,否則傳回被刪除的 value 值

void clear( ) 清除集合物件的所有元素boolean containsKey(Object)

檢查集合物件中是否擁有參數 Object 的鍵值,如果有傳回 true

boolean containsValue(Object)

檢查集合物件中是否擁有參數 Object 的值,如果有傳回 true

Page 16: 第十四章: Collections 集合物件與資料結構

14-4 實作 Map 介面的集合類別◎ Map 介面的基礎

Object get(Object) 傳回參數 Object 鍵值所對應的值Set keySet( ) 將健值轉換成實作 Set 介面的集合物

件Collection values( ) 將值轉換成實作 Collection 介面的集

合物件

Page 17: 第十四章: Collections 集合物件與資料結構

14-4 實作 Map 介面的集合類別◎ HashMap 類別—實作 Map 介面

HaspMap 類別實作 Map 介面。 相當於舊版的 Hashtable 類別。 儲存的元素有兩個: key 值、對應值,允許儲存 null 值或鍵值。 建立 HaspMap 物件: HashMap hmap = new HashMap();

建構子 說明 Ch14_4_2

HashMap( ) 建立 1 個空的 HashMap 物件,預設的元素容量是 16

HashMap(int) 建立空的 HashMap 物件,可以指定擁有參數 int 的元素數

HashMap(Map) 使用參數 Map 物件的元素建立的 HaspMap 物件

Page 18: 第十四章: Collections 集合物件與資料結構

14-4 實作 Map 介面的集合類別◎ TreeMap 類別—實作 SortedMap 介面

鍵值由小到大進行排序。 建立 TreeMap 物件: TreeMap tmap = new TreeMap( );

建構子 說明TreeMap( ) 建立一個空的 TreeMap 物件,使用鍵值的大

小進行排序TreeMap(Map) 使用參數 Map 物件的元素建立 TreeMap 物件TreeMap(Comparator c)

建立空的 TreeMap 物件,以參數 Comparator比較物件進行排序

TreeMap(SortedMap) 使用參數實作 SortedMap 介面的物件來建立 TreeMap 物件,其排序方式和參數相同

Page 19: 第十四章: Collections 集合物件與資料結構

14-4 實作 Map 介面的集合類別◎ HashMap 類別—實作 Map 介面

SortedMap 介面方法 說明 Ch14_4_3

Object firstKey( ) 傳回集合物件的第 1 個,即最小的鍵值Object lastKey( ) 傳回集合物件的最後 1 個,即最大的鍵值SortedMap headMap(Object) 傳回小於參數 Object 鍵值的部份 TreeMap

物件SortedMap subMap(Object1,Object2)

傳回大於等於參數 Object1 鍵值,到小於Object2 鍵值的部份 TreeMap 物件

SortedMap tailMap(Object) 傳回大於等於參數 Object 鍵值的部份 TreeMap 物件

Page 20: 第十四章: Collections 集合物件與資料結構

14-5Collection 物件與資料結構 使用 Java 的 LinkedList 集合物件建立堆疊資料結構。 堆疊資料結構擁有兩種特性: *只允許從堆疊的頂端存取資料。 * Last Out , First In

方法 說明 Ch14_5

boolean isEmpty( ) 檢查堆疊是否已空,傳回值 true 為空, false 為仍有資料void push(Objet) 將參數 Object 的資料存入堆疊Object pop( ) 取出堆疊的資料

Page 21: 第十四章: Collections 集合物件與資料結構

14-6 輸出 Collections 物件的元素

Iterator 和 ListIterator 介面可以使用一致的走訪方式輸出集合物件的元素。

toArray() =>元素輸出成陣列結構。

Page 22: 第十四章: Collections 集合物件與資料結構

14-6 輸出 Collections 物件的元素◎ Iterator 介面輸出元素

一致的方法來走訪集合物件的元素或刪除元素。 Ch14_6_1

介面方法 說明Iterator iterator( ) 取得集合物件實作 Iterator 介面的物件

Iterator 介面方法 說明boolean hasNext( ) 是否有下一個元素,如果有傳回 true

Object next( ) 取得集合物件的下一個元素void remove( ) 刪除最後一個取得的元素

Page 23: 第十四章: Collections 集合物件與資料結構

14-6 輸出 Collections 物件的元素◎ ListIterator 介面輸出元素

可雙向走訪集合物件的元素。 ArrayList 物件 alist 取得 ListIterator 介面物件。 ListIterator iterator = alist.listIterator(0);

介面方法 說明ListIterator listIterator( ) 取得集合物件實作 ListIterator 介面的物件,相

當於 listlterator(0)

ListIterator listIterator(int) 取得集合物件實作 ListIterator 介面的物件,參數 int 是第一個元素的索引位置

Page 24: 第十四章: Collections 集合物件與資料結構

14-6 輸出 Collections 物件的元素◎ ListIterator 介面輸出元素

ListIterator 介面方式 說明 Ch14_6_2

void add(Object) 在下 1 個元素前插入參數 Object 的元素boolean hasNext( ) 是否有下 1 個元素,如果有傳回 true

boolean hasPrevious( ) 是否有前 1 個元素,如果有傳回 true

Object next( ) 取得集合物件的下一個元素int nextIndex( ) 取得集合物件下一個元素的索引Object previous( ) 取得集合物件的前一個元素int previousIndex( ) 取得集合物件前一個元素的索引void remove( ) 刪除最後一個取得的元素void set(Object) 取代最後一個元素成為參數 Object

Page 25: 第十四章: Collections 集合物件與資料結構

14-6 輸出 Collections 物件的元素◎ toArray() 方法輸出成陣列

介面方法 說明 Ch14_6_3

Object[ ] toArray( ) 傳回擁有集合物件元素的陣列

Object[ ] toArray(Object[ ])

傳回擁有集合元素的陣列,元素是儲存在參數的陣列,其型態與參數陣列相同

Page 26: 第十四章: Collections 集合物件與資料結構

14-7 使用 Collections 物件時做類別關係◎實作 Comparator 介面的比較物件

Comparator介面方法 說明 Ch14_7_1

int compare(Object,object) 比較參數 2 個 Object 的大小,如果第 1 個比較小,傳回負值,比較大傳回正值,相同傳回 0

boolean equals(Object) 檢查物件是否與參數 Object 相等,如果是傳回 true

Page 27: 第十四章: Collections 集合物件與資料結構

習題 11— 佇列( Queues ) 佇列與堆疊十分相似的資料結構,擁有兩種

特性,如下所示: *從佇列的一端存入資料,從另一端讀取資料。 *資料存取的順序是先進先出( First In , First Out ),也

就是先存入佇列的資料,先行取出。