ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

lamada下集合同步和并发处理效率验证

2020-02-04 09:56:41  阅读:184  来源: 互联网

标签:验证 list System currentTimeMillis 并发 lamada println size


对于集合,我们并不陌生,用的很多,也会不知不觉中忽略其中的一些细节,比如细节问题,当在大数据情况下的效率问题等。

我主要是针对list和set使用lamada来对集合进行处理的效率比较,同时还对同步和并发进行了验证

代码如下:

 1  //根据数字的大小,有不同的结果
 2     private static int size = 10000000;
 3 
 4  /**
 5      * 测试list
 6      */
 7     public static void testList() {
 8         List<Integer> list = new ArrayList<>(size);
 9         for (Integer i = 0; i < size; i++) {
10             list.add(new Integer(i));
11         }
12 
13         List<Integer> temp1 = new ArrayList<>(size);
14         //老的
15         long start = System.currentTimeMillis();
16         for (Integer i : list) {
17             temp1.add(i);
18         }
19         System.out.println("old:" + (System.currentTimeMillis() - start));
20 
21         //同步
22         long start1 = System.currentTimeMillis();
23         list.stream().collect(Collectors.toList());
24         System.out.println("同步:" + (System.currentTimeMillis() - start1));
25 
26         //并发
27         long start2 = System.currentTimeMillis();
28         list.parallelStream().collect(Collectors.toList());
29         System.out.println("并发:" + (System.currentTimeMillis() - start2));
30     }

针对不同的数据进行了测试

当size=100000时,

 

当size=1000000时,

 

 

 

当size=10000000时,

 

 

 因为本地内存有限,再往大测试会内存溢出,但是我们能看出,list集合 并发 还是比同步快很多,数量级越大差距越大

 

接下来我们来测试下set的效率

代码如下:

 1 //根据数字的大小,有不同的结果
 2     private static int size = 100000;
 3 
 4 
 5 /**
 6      * 测试set
 7      */
 8     public static void testSet() {
 9         List<Integer> list = new ArrayList<>(size);
10         for (Integer i = 0; i < size; i++) {
11             list.add(new Integer(i));
12         }
13 
14         Set<Integer> temp1 = new HashSet<>(size);
15         //老的
16         long start = System.currentTimeMillis();
17         for (Integer i : list) {
18             temp1.add(i);
19         }
20         System.out.println("old:" + (System.currentTimeMillis() - start));
21 
22         //同步
23         long start1 = System.currentTimeMillis();
24         list.stream().collect(Collectors.toSet());
25         System.out.println("同步:" + (System.currentTimeMillis() - start1));
26 
27         //并发
28         long start2 = System.currentTimeMillis();
29         list.parallelStream().collect(Collectors.toSet());
30         System.out.println("并发:" + (System.currentTimeMillis() - start2));
31     }

当size=100000时,

 

当size=1000000时, 

 

 当size=10000000时,

 

我们会发现,set来说,当超过一定数量级的时候,并发的效率反而低于同步的效率,所以不能盲目认为并发一定高于同步。

总得来说,我们也可以看出来list和set本身特性给他们带来的影响,list是有序且可重复的,而set则是无序且不能重复的,导致并发带来的效率完全不一样。

一次作为经验,用于后续参考使用。

 

 

 

标签:验证,list,System,currentTimeMillis,并发,lamada,println,size
来源: https://www.cnblogs.com/xzshare/p/12258375.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有