在翻看运维系统时,引发的思考,下图的代码换成for循环在性能方面是否会好一些?
自己写的测试代码,但是不知道是否具有代表性
@Test
public void groupList() {
ArrayList<Integer> integers = new ArrayList<>();
for (int i = 0; i < 10000000; i++) {
integers.add(1);
integers.add(2);
integers.add(3);
integers.add(4);
integers.add(5);
integers.add(6);
integers.add(6);
}
System.out.println("集合大小------------>"+integers.size());
//-----------------------------------------------------------------------------
long l3 = System.currentTimeMillis();
ArrayList<Integer> integers1 = new ArrayList<>();
for (int i = 0; i < integers.size(); i++) {
if (integers.get(i)>0){integers1.add(integers.get(i));}}
long l4 = System.currentTimeMillis();
System.out.println("普通for用时:"+(l4-l3));
System.out.println("普通for大小:"+integers1.size());
//-----------------------------------------------------------------------------
long l5 = System.currentTimeMillis();
ArrayList<Integer> integers2 = new ArrayList<>();
for (Integer integer : integers) {
if (integer>0){integers2.add(integer);}}
long l6 = System.currentTimeMillis();
System.out.println("增强for用时:"+(l6-l5));
System.out.println("增强for大小:"+integers2.size());
//-----------------------------------------------------------------------------
long l1 = System.currentTimeMillis();
List<Integer> collect = integers.stream().filter(x -> x > 0).collect(Collectors.toList());
long l2 = System.currentTimeMillis();
System.out.println("stream.filter用时:"+(l2-l1));
System.out.println("stream.filter大小:"+collect.size());
//-----------------------------------------------------------------------------
long l7 = System.currentTimeMillis();
List<Integer> collect2 = integers.stream().map(x -> (x > 0) ? x : 1).collect(Collectors.toList());
long l8 = System.currentTimeMillis();
System.out.println("stream.map用时:"+(l8-l7));
System.out.println("stream.map大小:"+collect2.size());
}
结果如下:
集合大小------------>70000000
普通for用时:12172
普通for大小:70000000
增强for用时:812
增强for大小:70000000
stream.filter用时:21988
stream.filter大小:70000000
stream.map用时:3724
stream.map大小:70000000