關於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,一旦引用失效,相應的值也就不存在了,比如下面一段代碼中:
{
function onclick()
{
dp.sh.Toolbar.Command('ViewSource',this);return false;
}
}" href="http://www.ondev.net/post/show/565">view plain{
function onclick()
{
dp.sh.Toolbar.Command('CopyToClipboard',this);return false;
}
}" href="http://www.ondev.net/post/show/565">copy to clipboard{
function onclick()
{
dp.sh.Toolbar.Command('PrintSource',this);return false;
}
}" href="http://www.ondev.net/post/show/565">print{
function onclick()
{
dp.sh.Toolbar.Command('About',this);return false;
}
}" href="http://www.ondev.net/post/show/565">?
- 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();
- }
- }
public class TestHashMap { </p><p> public static WeakHashMap wHmp= new WeakHashMap(); </p><p> public static void main(String args[]){<br /> String s1 = new String("one");<br /> wHmp.put(s1,new Integer(1));<br /> addObject(wHmp);<br /> Set setHmp= wHmp.keySet(); </p><p> for(Iterator it=setHmp.iterator();it.hasNext();){<br /> System.out.println(wHmp.get(it.next()));<br /> } </p><p> } </p><p> public static void addObject(WeakHashMap wHmp){ </p><p> String s2 = new String("two");<br /> String s3 = new String("three");<br /> wHmp.put(s2,new Integer(2));<br /> wHmp.put(s3,new Integer(3));<br /> s2=null;<br /> s3=null;<br /> System.gc();<br /> }<br />}<br />
最後列印出來的結果只有"one”
原文發表於: http://www.ondev.net/post/show/565