1. 程式人生 > >Java 集合知識彙總

Java 集合知識彙總

      Java的集合內容很豐富,可以稱為Java集合框架,所謂框架者,必然存在著層次關係,在面向物件的世界裡,層次意味著介面,抽象類及實現了介面或者繼承自抽象類的類。介面的出現很好理解,因為不同型別的集合都有一些通用的方法。一圖勝千言:Java集合的關係圖如下:

     

注意:很多人想當然地認為Collection介面是所有集合的頂級介面,後來通過讀Java API 6 發現,Map和Collection沒有血緣關係,真是大跌眼鏡!

我們來看看API中對Collection和Map的介面及其子類的描述:

通過這兩個圖我們可以發現,Map和Collection確實是不同的。集合中有的類可以允許重複元素,有的不可以,下面有一個列表進行了總結。

List是有序集合,而Set和Map則不一定。以Tree開頭的都是有序的。而以Hash開頭的,是用hash實現的,效能上比用二叉樹實現的Tree**要好。
關於同步問題,一般而言,非同步的類,效能比同步的要好。我們建議用Collections.synchronizedCollection(Collection<T> c)方法去處理原本非同步的類,在不丟失效能的前提下,實現同步。Java1.5提供了ConcurrentHashMap,適用於高併發的執行緒安全實現。

下面是幾個例子:

<pre class="java" name="code">Set set = new HashSet();
set.add("111");
set.add("222");
set.add("333");
set.add("333"); // can not be added
System.out.println("size = "+set.size());
for(Iterator it = set.iterator();it.hasNext();){
	System.out.println(it.next());
}
		
List list = new ArrayList();
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("ddd");
System.out.println("size = "+list.size());
for(Iterator it = list.iterator();it.hasNext();){
	System.out.println(it.next());
}
		
Vector v = new Vector();
v.add("v1");
v.add("v2");
v.add("v3");
v.add("v3");
for(Iterator it = v.iterator();it.hasNext();){
	System.out.println(it.next());
}
		
List arrayList = new ArrayList();
arrayList.add("Index");
arrayList.add("Index");
arrayList.add("Index");
for(Iterator it = arrayList.iterator();it.hasNext();){
	System.out.println(it.next());
}