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

Download Report

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

第十四章:Collections集合物件與
資料結構
*集合物件的基礎 ………………..
*實作Set介面的集合類別
……..
*實作List介面的集合類別
..……
*實作Map介面的集合類別
……..
*Collections物件與資料結構
…..
*使用Collections物件實作類別關係
14-1集合物件的基礎
◎Java Collections Framework
「集合物件」(Collections)是指一組相關的物件集合,將這組物件
集合視為單一物件,在集合物件中的物件稱為「元素」。
 組成架構:
*集合介面 *實作 *演算法

介面
具體類別
Set
HashSet
SortedSet
TreeSet
List
ArrayList、LinkedList、Vector
Map
HashMap、Hashtable
SortedMap
TreeMap
14-1集合物件的基礎
◎集合介面
 Collection集合介面
<<interface>>
Collection
<<interface>>
Set
 Map集合介面
<<interface>>
Map
<<interface>>
List
<<interface>>
SortedMap
<<interface>>
SortedSet
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
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物件
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介面的物件來建立
TreeSet物件,其排序方式和參數相同
14-2實作Set介面的集合類別
◎TreeSet類別—實作SortedSet介面
SortedSet介面方法
說明 Ch14_2_3
Object first( )
傳回集合物件的第一個元素
Object last( )
傳回集合物件的最後一個元素
SortedSet headSet(Object)
傳回小於參數Object元素的部
份TreeSet物件
傳回大於等於參數Object1元
素,到小於Object2元素的部
份TreeSet物件
傳回大於等於參數Object元素
的部份TreeSet物件
SortedSet
subSet(Object1,object2)
SortedSet tailSet(Object)
14-3實作List介面的集合類別
◎List介面的基礎
 List 介面也是繼承自Collection介面=>循序
集合物件。
 允許重複元素。
 元素擁有索引位置。(類似陣列索引方式來
存取元素)
 循序與排序的不同:
循序:如同陣列【元素位置以索引來排列】
排序:以元素的大小進行排列。
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個參數int(不
包含)間的子集合
14-3實作List介面的集合類別
◎ArrayList類別
 ArrayList類別實作List介面。
 儲存元素的方式類似陣列。【索引】
 元素新增或插入ArrayList物件,並不用事先
宣告物件的尺寸。【動態陣列】
 建立ArrayList的物件:
 ArrayList alist = new ArrayList()
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物件的容量剪裁成目前尺寸的元素
數
14-3實作List介面的集合類別
◎LinkedList類別
 LinkedList類別實作List
介面。
 鏈結串列。
first
null
建構子
LinkedList( )
說明
建立一個空的LinkedList物件
LinkedList(Collection) 使用參數Collection物件的元素建立LinkedList物件
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個元素,傳回刪除的
元素
14-4實作Map介面的集合類別
◎Map介面的基礎
 Map介面並不是擴充自Collection介面。
 獨立類別架構的根介面。
 屬於一種儲存「鍵值結合」元素的集合物件。
 儲存物件共有兩個:鍵值(Key)、對應值
(Value)
Key:不可重複
Value:一個鍵值對應一個值
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
14-4實作Map介面的集合類別
◎Map介面的基礎
Object get(Object)
傳回參數Object鍵值所對應的值
Set keySet( )
將健值轉換成實作Set介面的集合物
件
Collection values( )
將值轉換成實作Collection介面的集
合物件
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物件
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物件,其排序方式和參數相同
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物件
14-5Collection物件與資料結構
使用Java的LinkedList集合物件建立堆疊資料結構。
 堆疊資料結構擁有兩種特性:
*只允許從堆疊的頂端存取資料。
*Last Out,First In

方法
說明
Ch14_5
boolean isEmpty( ) 檢查堆疊是否已空,傳回值true為空,false為仍有資料
void push(Objet)
將參數Object的資料存入堆疊
Object pop( )
取出堆疊的資料
14-6輸出Collections物件的元素
 Iterator和ListIterator介面可以使用一致的走
訪方式輸出集合物件的元素。
 toArray() =>元素輸出成陣列結構。
14-6輸出Collections物件的元素
◎Iterator介面輸出元素

一致的方法來走訪集合物件的元素或刪除元素。
介面方法
Ch14_6_1
說明
Iterator iterator( ) 取得集合物件實作Iterator介面的物件
Iterator介面方法
說明
boolean hasNext( ) 是否有下一個元素,如果有傳回true
Object next( )
取得集合物件的下一個元素
void remove( )
刪除最後一個取得的元素
14-6輸出Collections物件的元素
◎ListIterator介面輸出元素
可雙向走訪集合物件的元素。
 ArrayList物件alist取得ListIterator介面物件。
ListIterator iterator = alist.listIterator(0);

介面方法
ListIterator listIterator( )
說明
取得集合物件實作ListIterator介面的物件,相
當於listlterator(0)
ListIterator listIterator(int) 取得集合物件實作ListIterator介面的物件,參
數int是第一個元素的索引位置
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
14-6輸出Collections物件的元素
◎toArray()方法輸出成陣列
介面方法
Object[ ] toArray( )
說明
Ch14_6_3
傳回擁有集合物件元素的陣列
Object[ ] toArray(Object[ ]) 傳回擁有集合元素的陣列,元素是儲存在參數
的陣列,其型態與參數陣列相同
14-7使用Collections物件時做類別關係
◎實作Comparator介面的比較物件
Comparator介面方法
說明
Ch14_7_1
int compare(Object,object)
比較參數2個Object的大小,如果第1個比較小,
傳回負值,比較大傳回正值,相同傳回0
boolean equals(Object)
檢查物件是否與參數Object相等,如果是傳回true
習題11—佇列(Queues)
 佇列與堆疊十分相似的資料結構,擁有兩種
特性,如下所示:
*從佇列的一端存入資料,從另一端讀取資料。
*資料存取的順序是先進先出(First In,First Out),也就
是先存入佇列的資料,先行取出。