https://hacpai.com/article/1578380907025
實體類:
@ToString
@Data
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private BigDecimal age;
private User user;
}
下面是性能對比的代碼:
public static void main(String[] args) {
List<User> users = new ArrayList<>();
User user = new User();
user.setAge(new BigDecimal(1.5));
users.add(user);
user = new User();
user.setAge(new BigDecimal(0.3));
users.add(user);
user = new User();
user.setAge(new BigDecimal(0.7));
users.add(user);
user = new User();
user.setAge(new BigDecimal(3.5));
users.add(user);
for(int i = 0 ; i < 10000000; i++) {
user = new User();
user.setAge(new BigDecimal(3.5));
users.add(user);
}
System.out.println(users.size());
List<User> synchronizedList = Collections.synchronizedList(users);
//開始時間
long startTime = System.currentTimeMillis();
//Java Lambda 表達式 forEach方式
users.stream().forEach(forEachUser-> forEachUser.getAge());
//結束時間
long endTime = System.currentTimeMillis();
System.out.println("Lambda 表達式forEach方式遍歷的時間爲:"+(endTime - startTime));
//迭代器方式遍歷
long startTime1 = System.currentTimeMillis();
Iterator<User> iterator = users.iterator();
while (iterator.hasNext()) {
User next = iterator.next();
next.getAge();
}
long endTime1 = System.currentTimeMillis();
System.out.println("迭代器方式遍歷的時間爲:"+(endTime1 - startTime1));
//普通for循環
long startTime2 = System.currentTimeMillis();
for(int i = 0; i < users.size(); i++) {
users.get(i).getAge();
}
long endTime2 = System.currentTimeMillis();
System.out.println("普通for循環遍歷的時間爲:"+(endTime2 - startTime2));
//並行流方式
long startTime4 = System.currentTimeMillis();
users.parallelStream().forEach(forEachUser -> {
forEachUser.getAge();
});
long endTime4 = System.currentTimeMillis();
System.out.println("並行流的forEach的遍歷時間爲"+(endTime4 - startTime4));
}
對比結果:
10000004
Lambda 表達式forEach方式遍歷的時間爲:118
迭代器方式遍歷的時間爲:83
普通for循環遍歷的時間爲:80
並行流的forEach的遍歷時間爲52
其實這樣結果我很意外,因爲在昨天並行流的對比結果相對差多了,也就比Lambda的foreach快點,之後我把並行流的順序放在第一位結果如下:
並行流的forEach的遍歷時間爲114
Lambda 表達式forEach方式遍歷的時間爲:89
迭代器方式遍歷的時間爲:93
普通for循環遍歷的時間爲:89
突然發現並行流的速度差了很多,原因未知。