您的位置:首页 > 编程语言 > Java开发

Java Collection框架:你可能不知道的一些小知识

2009-04-23 22:04 831 查看
 

 

关于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,一旦引用失效,相应的值也就不存在了,比如下面一段代码中:

 

view plaincopy to clipboardprint?

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 {

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”

 

 

原文发表于: http://www.ondev.net/post/show/565
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐