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