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

 

 

关于Java Collection Framework,你可能已经知道如下一些事实

  1. Vector是线程安全的,ArrayList不是
  2. ArrayList的读操作比LinkedList快,LinkedList的append操作比ArrayList快
  3. Set中不可能有两个相等的元素,也就是说,如果e1和e2都在同一个Set中,那么不可能有e1.equals(e2)
  4. HashMap是线程不安全的,HashTable是线程安全的


但是你可能还不知道或者不了解这些事情:

  1. LinkedList不是线程安全的
  2. 不管是在多线程还是单线程的环境下,ArrayList都要比Vector快很多倍
  3. Set中可以插入null,不过最多只会有一个
  4. HashMap中可以插入null,HashTable中不行
  5. TreeSet使用compareTo代替equals判断是否两个元素相等
  6. HashMap中的元素,无论是keySet还是valueSet,都不一定是按照插入时间先后排序的,HashSet也一样
  7. 对于非线程安全的类,比如HashMap,ArrayList,TreeSet,可以使用Collections.synchronizedXXX方法(比如synchronizedSet,synchronizedList,synchronizedMap)
  8. 你可以使用Collections.unmodifiableList来构建出一个不能被修改的List
  9. 你可以使用Arrays.equals来判断两个数组是否相等
  10. WeakHashMap使用元素的引用而不是值作为key,也就是说必须在引用相同(a==b)的情况下才能找到相关的值
  11. 对于WeakHashMap,一旦引用失效,相应的值也就不存在了,比如下面一段代码中:

 

  1. public class TestHashMap {    
  2.   
  3.     public static WeakHashMap wHmp= new WeakHashMap();    
  4.        
  5.     public static void main(String args[]){    
  6.        String s1 = new String("one");    
  7.        wHmp.put(s1,new Integer(1));    
  8.        addObject(wHmp);    
  9.        Set setHmp= wHmp.keySet();    
  10.            
  11.        for(Iterator it=setHmp.iterator();it.hasNext();){    
  12.           System.out.println(wHmp.get(it.next()));    
  13.       }    
  14.            
  15.    }    
  16.        
  17.    public static void addObject(WeakHashMap wHmp){    
  18.            
  19.      String s2 = new String("two");    
  20.      String s3 = new String("three");    
  21.      wHmp.put(s2,new Integer(2));    
  22.      wHmp.put(s3,new Integer(3));    
  23.      s2=null;    
  24.      s3=null;    
  25.      System.gc();    
  26.    }    
  27. }   

 

最后打印出来的结果只有"one”

 

 

原文发表于: http://www.ondev.net/post/show/565

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件开发和挖掘机技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值