Java中常用容器總結
1、Collection介面
資料都是單個單個的儲存在其中的。
常用方法:
boolean add(Object element) 新增元素
boolean remove(Object element) 刪除元素
boolean contains(Object element) 查詢該元素,沒有返回false,有則返回位置。
int size() 返回容器大小。
boolean isEmpty() 是否為空的。
void clear() 清空容器。
Iterator interator() 獲取迭代器。
boolean containsAll(Collection c) 是否包含c容器中所有元素。
boolean addAll(Collection c) 把c中的所有元素加到此容器中。
boolean remove(Collection c) 移除本容器和c都有的元素。
boolean retainAll(Collection c) 留下和c的交集。
Object [] toObject() 轉化成Object陣列。
1.1 List介面
繼承了Collection介面,有序!可以通過索引進行操作。(有序指的是存放順序與放入順序一致)
常用方法:
void add(int index ,Object e) 在指定位置插入元素。
Object set(int index , Object e) 修改指定位置元素。
Object get(int index) 獲取指定位置元素。
Object remove(int index); 刪除指定位置元素。
int indexOf(Object o) 返回該元素第一次出現的位置。
int lastIndexOf(Object o) 返回該元素最後一次出現的位置。
實現類:
ArryList 內部使用一個會自己擴容的陣列實現,查詢效率高,增刪效率低,執行緒不安全。
LinkedList 內部使用雙向連結串列實現,查詢效率低,增刪效率高,執行緒不安全。
Vector 使用陣列實現的,它相關方法增加了同步檢查,執行緒安全!
1.2 Set介面
繼承了Collection介面,元素不能重複,無序。(無序指的是存放順序與放入順序不一致)
要取值出來可以用增強for迴圈遍歷取出。
常用方法:
見Collection介面常用方法。
實現類:
HashSet 使用HashMap實現,查詢、增刪效率都高,執行緒不安全,允許值為null。
TreeSet 對內容自動進行排序,排序規則可以自行確定(繼承Comparable介面,重寫compareTo方法),使用TreeMap實現。
1.3 迭代器Interator
用來遍歷容器中的值。
常用方法:
hasNext() 判斷是否有下一個元素。
next() 返回遊標所在元素,並把遊標指向下一個位置。
remove() 刪除遊標所在位置的元素,在next後該操作只能執行一次。
使用形式:
Iterator itr = Cllection的子類物件.iterator(); while(itr.hasNext()){ itr.next(); }
1.4 Collections工具類
它提供了一些操作Collection容器的簡單方法:
sort(List list) 排序,由小到大。
shuffle(List list) 打亂,隨機排序。
reverse(List list) 逆序,頭尾顛倒。
fill(List list , Object o) 用o重寫整個list。
int binarySearch(List list , Object o) 二分法在list中查詢o,記得先給list排好序,不然會找不到!
2、Map介面
基於Key和Value的結構儲存資料,Key不能重複,value可以重複。
常用方法:
V put(K key , V value) 新增一對key、value到集合中。
void putAll(Map m) 把m中所有元素加入到集合中。
V remove(Object key) 刪除key對應的value。
V get(Object key) 獲取key對應的value。
boolean containKey(Object key) 判斷是否存在key。
boolean containValue(Object value) 判斷是否存在value。
Set keySet() 獲取所有的key,存放到Set集合中。
Set<Map.Entry<K,V>> entrySet() 返回一個Set,裡面存放的是Map內的一個泛型介面Entry<K,V>,包含了集合的所有對映。
void clear() 刪除Map中所有對映。
實現類:
TreeMap 使用紅黑樹實現的,效率比HashMap低,但是它自動排序,排序規則(繼承Comparable介面,重寫compareTo方法)。
HashMap 使用雜湊表儲存資料,如果新進來的值key重複,則會覆蓋舊值。
遍歷Map方式一:通過Key集合遍歷。
Set<Integer> set = map.keySet(); for(Integer i:set){ //i為key System.out.println("key:"+i+"\nvalue:"+map.get(i)); }
遍歷Map方式二:轉為Set,再遍歷。
/** * entrySet返回一個Set集合,這個集合中存放的是Map.Entry<K,V>, * 看原始碼,易知Entry是Map的一個內部介面,它有三個方法:getKey()/getValue()/setValue()。 */ Set<Map.Entry<Integer,String>> set=map.entrySet(); for(Map.Entry<Integer,String> temp:set){ //獲得key和value temp.getKey() temp.getValue(); //可以改變內部的值 temp.setValue("love"); }
遍歷Map方式三:轉為Set,使用迭代器。
//map把對映內容丟入一個Set<Map.Entry<K,V>>集合中,然後通過.iterator獲得這個Set的迭代器 Iterator<Map.Entry<Integer,String>> it = map.entrySet().iterator(); while(it.hasNext()){ Map.Entry<Integer,String> temp =it.next(); System.out.println(temp.getKey()+"->"+temp.getValue()); }
解釋一個難以理解的方法:
entrySet()方法
它實現了HashMap物件轉為Set物件,這樣就可以使用迭代器Iterator進行遍歷了。
但是Set物件裡面存放的比較特殊,是一對資料,Map.Entry<K,V>。
這個資料有getKey,getValue,setValue三個方法。