java map对象的效率比较

 @SuppressWarnings("unchecked")   
public class MapPerformance {   
      public static void main(String[] args) {   
              MapPerformance test = new MapPerformance(10 * 10000);   
              out.print(StringUtils.center("Test Map Performance: loop=" + test.loop, 80, '-'));   
              out.printf("\n sssssss", "", "put", "put", "remove", "get",     
                              "iterator","for");   
              test.benchmark(new HashMap());   
              test.benchmark(new Hashtable());   
              test.benchmark(new LinkedHashMap());   
              test.benchmark(new IdentityHashMap());   
              test.benchmark(new TreeMap());   
              test.benchmark(new WeakHashMap());   
              test.benchmark(new ConcurrentHashMap()); 
       
       
      private int loop = 10000;   
      public MapPerformance(int loop) {   
              this.loop = loop;   
       
      public void benchmark(Map map) {   
              out.printf("\n s", map.getClass().getSimpleName());   
              int j;   
              StopWatch watch = null;   
              //1.测试顺序性能(Add)   
              (watch = new StopWatch()).start();   
              for (int i = 0; i < loop; i++) {   
                map.put(i, i);
               
              watch.stop();   
              out.printf("d", watch.getTime());   
              //2.测试随机插入性能(Random insert)   
              (watch = new StopWatch()).start();   
              for (int i = 0; i < loop; i++) {   
                      j = (int) (Math.random() * loop);   
                      map.put(j, new Integer(-j));   
               
              watch.stop();   
              out.printf("d", watch.getTime());   
              //3.测试随机索引删除(Random remove)   
              (watch = new StopWatch()).start();   
              for (int i = 0; i < loop; i++) {   
                      j = (int) (Math.random() * loop);   
                      map.remove(j);   
               
              watch.stop();   
              out.printf("d", watch.getTime());   
              //4.测试随机取数性能(Random get)   
              (watch = new StopWatch()).start();   
              for (int i = 0; i < loop; i++) {   
                      j = (int) (Math.random() * loop);   
                      map.get(j);   
               
              watch.stop();   
              out.printf("d", watch.getTime());   
               
              //6.测试迭代性能(Iterator)   
              (watch = new StopWatch()).start();   
              Iterator<Object> iter = map.values().iterator();   
              while (iter.hasNext()) {   
                      iter.next();   
               
              watch.stop();   
              out.printf("d", watch.getTime());
          //7.测试迭代性能(Iterator)   
              (watch = new StopWatch()).start();   
        //    Iterator<Object> iter = list.iterator();   
              for (Object obj : map.values()) {   
                   
               
              watch.stop();   
              out.printf("d", watch.getTime());
         

   
结果:

-----------------------Test Map Performance: loop=100000------------------------
                           put    random-put    remove       get  iterator       for
             HashMap        47        94        78        47                0
           Hashtable       141        78        78        62               16
       LinkedHashMap       125        78        94        47                0
     IdentityHashMap       172       265        47        63        15        16
             TreeMap        94       125       187       109                0
         WeakHashMap       156       250        47        31               16
   ConcurrentHashMap        94       140        79        46               16

结论:

   1、HashMap的性能比较高,但不是线程安全的

   2、ConcurrentHashMap的put性能没有HashMap的高,get的性能与HashMap一样或者略高于,但是是线程安全的

 

参考:http://blog.sina.com.cn/s/blog_56fd58ab0100qel3.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值