集合陣列

Download Report

Transcript 集合陣列

Ch12 集合與泛型
物件導向程式設計(2)
大綱
O 集合與陣列
O 集合(collection)
O Set
O List: ArrayList, Vector, LinkedList
O Queue: LinkedList, PriorityQueue
O Map
O HashMap
集合與陣列
集合
陣列
空間 • 建立時不必指定集合大小
大小 • 無論存入或移除元素,集合
會動態調整空間大小以符合
需求
• 建立時必須指定陣列大小,
且無法改變
• 元素存取時不可超過索引上
限,否則會產生
OutOfBoundsException
資料 • 可存放任何物件
類型 • 基本資料類型會自動轉型成
對應的物件再存入集合中
• 放入的物件要搭配泛型,否
則會自動轉型成Object
• 可存放物件或基本資料類型,
但必須符合陣列所宣告的資
料型態
資料 可使用
存取 •for-each
•Iterator物件功能
可使用:
•for迴圈並搭配索引
•for-each
集合架構圖
Collection
Set
SortedSet
TreeSet
List
HashSet
ArrayList
Vector
Queue
LinkedList
LinkedList
PriorityQueue
Collection介面
常用方法
方法名
功能
boolean add(E ob)
新增物件ob至集合內,新增成功則回傳true,
反之為false
boolean clear()
將集合內所有元素清空
boolean isEmpty()
檢查集合是不是空的
Iterator iterator()
取得Iterator物件,可透過Iterator方法來走訪
集合內所有元素
boolean remove(Object obj) 將指定的元素從集合內移除
int size()
回傳集合內的元素總數
Object [] toArray()
將集合內元素轉存到陣列
泛型
1.
2.
3.
4.
5.
6.
7.
8.
9.
class Book<T> {
private T price;
public void setPrice(<T> price){
this.price = price;
}
public <T> getPrice() {
return price;
}
}
可以使得price可以在使用時才指定
資料型態,而且不用宣告多個變數但
是代表同一個意義
//將<T>全被取代為Integer
1.
Book<Integer> book1 = new
Book<Integer>();
2.
book1.setPrice(580);
//將<T>取代成String
1.
Book<String> book2 = new
Book<String>();
2.
book2.setPrice(“五百八十”);
//任何資料型態都可以,但會全變
成Object
1.
Book book3 = new Book();
2.
book3.setPrice(380.0);
泛型應用在集合上
O 集合搭配泛型的功能,就可以像陣列一樣限
制元素的資料類型
O 集合內元素取出後,也會與當初限制的資
料類型相同
Collection<T> c = new Set<T>();
Set集合
O Set集合內各個元素值不會重複
O Set集合內的元素沒有一定的存放順序
O HashSet是Set的子類別,所以有相同的特色
O SortedSet與Set集合相同,元素值不可重複
O SortedSet集合內的元素會做升冪排序
List、ArrayList、LinkedList集合
O 元素存放順序與新增的順序相同
O 使用索引,和陣列相同,都使用索引
O 元素值可重複
List、ArrayList、LinkedList集合的方法
方法名
功能
void add(int index, E element)
將指定物件插入指定索引上
E get(int index)
取得指定索引的元素
E set(int index, E element)
將索引上的元素用element取代
Queqe PriorityQueue
LinkedList
O Queue集合元素存取是先進先出
O PriorityQueue元素會先做升冪排序,然後才
依先進先出原則存取元素
O LinkedList元素加入的先後順序決定元素的
存取順序
Queqe PriorityQueue
LinkedList方法
方法名
功能
boolean offer(E o)
將指定物件新增至集合內
E peek()
取得第一順位的元素值,但不
會移除該元素
E poll()
取得第一順位的元素值,並同
時移除該元素
各種集合的特色
集合名稱
元素值
不重複
元素有排
序性
元素有順
序性
使用索引
List


ArrayList


LinkedList


Set

HashSet

SortedSet


TreeSet


先進先出

Queue

PriorityQueue

Map
O Map不是Collection,可是可以轉成集合,
所以也被歸類為集合
O 使用List或陣列時,透過索引來存取元素,
索引從0開始;Map有鍵值組,每一資料
含有鍵和一個對應值
O Map的鍵如同索引,所以不可以重覆
Map方法
方法名
功能
void clear()
清空Map內所有的鍵值組
V get(Object key)
依鍵取得對應的值
boolean isEmpty()
檢查Map是不是空的容器
Set<K> keySet()
將Map內部的鍵轉存成Set物件
V put(K key, V value)
將指定的鍵值組存放至Map內
V remove(Object key)
依照指定的鍵移除對應的鍵值組
int size()
回傳Map內的鍵值組的總數
Collection <V> values()
將Map內部的值轉存成Collection集合
HashMap SortedMap
O HashMap
O 鍵不重複
O 鍵無順序性,沒有一定的存放順序
O SortedMap
O 鍵不重複
O 鍵具有排序性