# Java Collections ###### 2024/06/12 --- ### Collections Framework * 處理資料結構 * 集合的大小可以自動改變 * 皆有`toString()`方法,可以直接輸出 * 下圖為架構(每個區塊皆是**interface**) ```mermaid graph TD Collection-->Set Collection-->List Collection-->Queue Map-->SortedMap Set-->SortedSet style Collection fill:#bbf,stroke:#259,stroke-width:2px style Map fill:#bbf,stroke:#259,stroke-width:2px ``` ### Collection * 可搭配**for-each** * 基本method:star: * `boolean add(Object o)` * `boolean contains(Object o)` * `boolean isEmpty()` * `Iterator iterator()` * `boolean remove(Object o)` * `int size()` * 多元素method * `boolean addAll(Collection c)` * `void clear()` * `boolean containsAll(Collection c)` * `boolean removeAll(Collection c)` * `boolean retainAll(Collection c)` >將包含於c內的元素留下,其他刪除 * 陣列method * `Object[] toArray()` * `Object[] toArray(Object[] a)` >指定存放的陣列,放不下會重新建立 * Collections ### Set :::info * 元素不重複 ::: * HashSet & LinkedHashSet * 架構 ```mermaid graph TD HashSet-->LinkedHashSet ``` * HashSet\<E> * LinkedHashSet\<E> * TreeSet :::info * 自動排序 ::: * method * `Object first()` * `Object last()` * `Object ceiling(Object o)` * `Object floor(Object o)` * `SortedSet headSet(Object toElement)` * `SortedSet subSet(Object fromElement, Object toElement)` * `SortedSet(Object fromElement)` ### List :::info * 有次序性 * 可以用索引來儲存:star: * 元素可重複 ::: * method * `void add(int index, Object element)` >插入 * `boolean addAll(int index, Collection c)` * `Object get(int index)` * `int indexOf(Object o)` * `int lastIndexOf(Object o)` * `Object remove(int index)` * `Object set(int index, Object o)` >替換 * `List subList(int fromIndex, int toIndex)` * ArrayList\<E> * 空間管理method * `void ensureCapacity(int minCapacity)` * `void trimToSize()` * LinkedList\<E> * method * 會拋出例外 * `void addFirst(Object o)` * `void addLast(Object o` * `Object getFirst()` * `Object getLast()` * `Object removeFirst()` * `Object removeLast()` * 會回傳布林值或null值:star: * `boolean offerFirst(Object o)` * `boolean offerLast(Object o)` * `Object peekFirst()` * `Object peekLast()` * `Object pollFirst()` * `Object pollLast()` * 同時實作了Queue和List * 方便用來實作Queue和Stack ### Map :::info * key-value * 重複加入鍵會取代先前的鍵 ::: * 基本method * `boolean isEmpty()` * `int size()` * `void clear()` * `Object put(Object key, Object value)`:star: * `void putAll(Map t)` * `Object remove(Object key)`:star: * 集合操作method * `boolean containsKey(Object key)` * `boolean containsValue(Object value)` * `Set entrySet()` >"key=value"格式的Set * `Object get(Object key)`:star: * `Set keySet()` >回傳key Set,可搭配**for-each** * `Collection values()` >回傳value Collection,可搭配**for-each** * HashSet\<E, E> ### Iterator :::info * 可以直接刪除 & 瀏覽Collection中的元素 * 迭代中不可以直接修改Collection,否則會拋出例外 * 等到iterator走到`hasNext=false`時,便可以再次修改Collection ::: * method * `boolean hasNext()` * `Object next()` * `void remove()` * `Iterator i = yourCollection.iterator();` ### Collections ```java= static boolean addAll(Collection c, Object... elements); static int binarySearch(List list, Comparable key); static int binarySearch(List list, Object key, Comparator c); static void copy(List dest, List src); // Copies all of the elements from one list into another. static boolean disjoint(Collection c1, Collection c2); // Returns true if the two specified collections have no elements in common. static void fill(List list, Object obj); static int frequency(Collection c, Object o); static Object max(Collection coll); static Object max(Collection coll, Comparator comp); static Object min(Collection coll); static Object min(Collection coll, Comparator comp); static List nCopies(int n, Object o); static boolean replaceAll(List list, Object oldVal, Object newVal); static void reverse(List list); static void sort(List list, Comparator c); static void swap(List list, int i, int j); ```