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