Java常見集合的歸納總結
Java常見集合的歸納總結
首先來看看集合的關系:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
一、Collection接口中定義的方法
int size():獲取當前集合中的元素數量
boolean isEmpty():查看當前集合中是否包含元素
不包含返回true
檢查當前集合是否為空集
boolean contains(Object o):
查看當前集合中是否包含給定的元素
void clear():清空集合
boolean add(E e):向集合中添加元素
當元素成功添加到集合中返回true
boolean remove(Object o):從集合中刪除給定的元素
boolean addAll(Collection c):
將給定集合中的所有元素添加到當前集合
boolean removeAll(Collection c):
刪除當前集合中與給定集合中相同的元素
Iterator iterator():
獲取迭代
二、List接口
1)ArrayList
1.ArrayList集合是有序的,可重復的集合,可以根據下表來取元素(下表從0開始)
2.常用方法有:
add() 增加元素
set() 修改元素的值
remove() 刪除元素
indexOf() 第一個對應元素的下標
lastIndexOf() 最后一個對應元素的下標
subList(int a,int b) 取子集(操作子集會影響原集合) 下標前包含后不包含[a,b) List中的獨有方法
toArray() 集合轉化成數組(Arrays.toString(array)是顯示該數組的方法)
2.遍歷集合的統一方式:
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /** * 遍歷集合的統一方式 * 迭代器模式 * @author admin * */ public class IteratorDemo { public static void main(String[] args) { Collection c = new ArrayList(); c.add("one"); c.add("two"); c.add("three"); //java.util.Iterator /* * Iterator不能實例化(接口) * 不同的集合提供了可以遍歷自身元素的迭代器實現 */ Iterator it = c.iterator(); /* * 使用迭代器遍歷集合的步驟 * 問取刪 * 刪不是必須的操作 */ //問問集合是否還有元素可以遍歷 while(it.hasNext()){ //取出這個元素 Object element = it.next(); //每次調用next()方法前都應先確保hasNext()為true // element = it.next(); System.out.println(element); } } }
2)LinkedList
1.Queue接口定義了隊列存取元素的基本方法,基于LinkedList的實現原理,它非常適合隊列的特性。
隊列,遵循先進先出原則.
1>.Queue常用方法
offer() 向隊列末尾追加新元素
poll() 獲取隊首元素,獲取后該元素就從隊列中被刪除
peek() 獲取隊首元素,但不從隊列中刪除
2.Deque 雙端隊列,兩端都可以進出隊但當我們約束從隊列的一端進出隊時,就形成了另一種存取模式
先進后出原則,這就是棧結構
1>.Deue常用方法
push() 壓入元素
pop() “彈出"棧頂元素(注意,當棧中沒有元素的時候pop方法會引發異常)
三、Map接口
Map中的key不允許重復。
1)HashMap 一個多行兩列的表格存儲元素以 key-value對的形式,散列算法實現的Map。
1>常用方法:
put() 存放元素
toString() HashMap重寫了toString(),格式為{key1=value1,key2=value2,....}
get(key) 取對應key值的元素的值
boolean containsKey(Object k) 查看當前Map中是否包含給定的key
boolean containsValue(Object v) 查看當前Map中是否包含給定的value
4>HashMap的遍歷
public class IterateMapDemo { public static void main(String[] args) { Map<Integer,String> map = new HashMap<Integer,String>(); map.put(1, "一"); map.put(2, "二"); map.put(3, "三"); map.put(4, "四"); map.put(5, "五"); /* * 獲取Map中所有的key * Set keySet() * 獲取一個Set集合,該集合中存放當前Map中的所有key */ Set<Integer> keys = map.keySet(); for(Integer key : keys){ System.out.println("key:"+ key); } /* * 遍歷每組鍵值對 * Map中每組鍵值對,使用一個Entry實例保存的 * Set entrySet() * 獲取一個Set集合,其中每一個元素是一個Entry的 * 實例,而每一個Entry的實例都包含著兩個內容 * 分別是key與value */ //java.util.Map.Entry Set<Entry<Integer,String>> entrySet = map.entrySet(); for( Entry<Integer,String> entry : entrySet ){ System.out.println( "key:" + entry.getKey() + "," + "value:" + entry.getValue() ); } /* * Collection values() * 遍歷所有的value,這個操作很少用 */ Collection<String> values = map.values(); for(String value : values){ System.out.println("value:" + value); } }
3>HashMap關于性能的幾個名詞
Capacity 容量: Hashmap中數組的長度
Initial capacity 初始容量:創建HashMap時,
數組的默認大小,16。
size 大小:HashMap中的元素數量
load factor 加載因子:默認值0.75
是一個比值 size/capacity
每當size/capacity達到加載因子時,數組擴容
并且對原數組中的數據重新進行散列算法并存入
擴容后的數組中
四、Set集合的實現類
1)HashSet
使用散列算法實現的
存放元素的順序與元素在集合中的順序不一致 但是元素在不改變的情況下,在集合中的順序是一致 的
Set集合的不重復的集合。
1>.HashSet常用方法
add() 添加元素
remove() 刪除元素
注意:a.一般循環遍歷的時候刪除Set集合使用用迭代器的remove()方法,不能直接調用 Set.remove(e)否則會報異常.
b:存放元素時是根據元素的hashcode()方法的返回值進行的,所以要保證equals方法 為ture的元素應具有相同的hashcode
c:盡可能不要在元素存入集合后修改該元素的內容防止hashcode值發生變化導致不 能正確訪問
1)TreeSet
使用二叉樹實現的
五、集合的排序
1)ArrayList排序
使用集合的工具類 Collections.sort(list)方法做自然排序。
2)實現Comparator接口
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /* * Comparable接口與Comparator接口 */ public class ComparableDemo { public static void main(String[] args) { //實現該類后,子類是可比較的 Comparable c; /* * 當我們需要排序的元素自身已經實現了Comparable * 接口,并且定義好了比較規則,但這種比較規則不能 * 滿足我們對于排序的需求是,我們就需要提供一種 * 額外的比較規則,這時候我們就需要使用Comparator */ List<String> list = new ArrayList<String>(); list.add("Killer"); list.add("adam"); list.add("cark"); list.add("marry"); list.add("Boss"); list.add("Jazz"); list.add("jason"); list.add("mark"); list.add("bill"); System.out.println(list); Collections.sort(list); System.out.println(list); /* * 不能夠滿足我們的希求,我們希望字母少的在前 * 字母多的在后 */ MyComparator comparator = new MyComparator(); /* * 使用Collections的重載sort方法 */ Collections.sort(list, comparator); System.out.println(list); } } /** * 為字符串提供額外的比較規則 * @author admin * */ class MyComparator implements Comparator<String>{ /** * 根據字符串的長度進行比較 */ public int compare(String o1, String o2) { return o2.length() - o1.length(); } }
來自:http://seabiscuit-1992.iteye.com/blog/2174656