(原文發表于http://www.ondev.net/post/show/565,轉載請注明出處)
關于Java Collection Framework,你可能已經知道如下一些事實
- Vector是線程安全的,ArrayList不是
- ArrayList的讀操作比LinkedList快,LinkedList的append操作比ArrayList快
- Set中不可能有兩個相等的元素,也就是說,如果e1和e2都在同一個Set中,那么不可能有e1.equals(e2)
- HashMap是線程不安全的,HashTable是線程安全的
但是你可能還不知道或者不了解這些事情:
- LinkedList不是線程安全的
- 不管是在多線程還是單線程的環境下,ArrayList都要比Vector快很多倍
- Set中可以插入null,不過最多只會有一個
- HashMap中可以插入null,HashTable中不行
- TreeSet使用compareTo代替equals判斷是否兩個元素相等
- HashMap中的元素,無論是keySet還是valueSet,都不一定是按照插入時間先后排序的,HashSet也一樣
- 對于非線程安全的類,比如HashMap,ArrayList,TreeSet,可以使用Collections.synchronizedXXX方法(比如synchronizedSet,synchronizedList,synchronizedMap)
- 你可以使用Collections.unmodifiableList來構建出一個不能被修改的List
- 你可以使用Arrays.equals來判斷兩個數組是否相等
- WeakHashMap使用元素的引用而不是值作為key,也就是說必須在引用相同(a==b)的情況下才能找到相關的值
- 對于WeakHashMap,一旦引用失效,相應的值也就不存在了,比如下面一段代碼中:
-
public
?
class
?TestHashMap?{? ??
-
??
-
????
public
?
static
?WeakHashMap?wHmp=?
new
?WeakHashMap();? ??
-
???? ??
-
????
public
?
static
?
void
?main(String?args[]){? ??
-
???????String?s1?=?
new
?String(
"one"
);? ??
-
???????wHmp.put(s1,
new
?Integer(
1
));? ??
-
???????addObject(wHmp);? ??
-
???????Set?setHmp=?wHmp.keySet();? ??
-
???????? ??
-
???????
for
(Iterator?it=setHmp.iterator();it.hasNext();){? ??
-
??????????System.out.println(wHmp.get(it.next()));? ??
-
??????}? ??
-
???????? ??
-
???}? ??
-
???? ??
-
???
public
?
static
?
void
?addObject(WeakHashMap?wHmp){? ??
-
???????? ??
-
?????String?s2?=?
new
?String(
"two"
);? ??
-
?????String?s3?=?
new
?String(
"three"
);? ??
-
?????wHmp.put(s2,
new
?Integer(
2
));? ??
-
?????wHmp.put(s3,
new
?Integer(
3
));? ??
-
?????s2=
null
;? ??
-
?????s3=
null
;? ??
-
?????System.gc();? ??
-
???}? ??
-
}???
最后打印出來的結果只有"one”
posted on 2009-04-08 10:28
幻 閱讀(624)
評論(0) 編輯 收藏 所屬分類:
編程相關