java - List 与 Set 的流性能差异
问题描述
anyMatch
在以下流中,这两者之间会有什么显着的表现吗?
- 一个创建自
List
- 第二个创建自
Set
?
List<Integer> list = List.of(1, 2, 3, 4);
Set<Integer> set = Set.of(1, 2, 3, 4);
var result1 = list.stream().anyMatch(i -> (i % 2 == 0));
var result2 = set.stream().anyMatch(i -> (i % 2 == 0));
我试图测量它,但 1M 执行的结果有大约 30milis 的差异,所以它可能是测量错误。
解决方案
There is no significant difference. I just benchmarked it with jmh (OpenJDK 17):
@BenchmarkMode(Mode.AverageTime)
@State(Scope.Benchmark)
public class SetListBenchmark {
private List<Integer> list;
private Set<Integer> set;
@Setup
public void setUp() {
list = List.copyOf(generateIntList());
set = Set.copyOf(generateIntList());
}
private List<Integer> generateIntList() {
var list = IntStream.range(1, 1_000_000)
.filter(i -> i % 2 != 0)
.boxed()
.collect(Collectors.toList());
list.add(4);
return list;
}
@Benchmark
public boolean measureList() {
return list.stream().anyMatch(i -> i % 2 == 0);
}
@Benchmark
public boolean measureSet() {
return set.stream().anyMatch(i -> i % 2 == 0);
}
}
Result:
Benchmark Mode Cnt Score Error Units
SetListBenchmark.measureList avgt 5 0.001 ± 0.001 s/op
SetListBenchmark.measureSet avgt 5 0.001 ± 0.001 s/op
推荐阅读
- spring-boot - Spring Cloud Stream 与 RabbitMQ binder 和 Transactional consumer/producer 与 DB 操作
- reactjs - 我应该如何在我的反应新闻应用程序上实施身份验证?
- javascript - firebase httpsCallable 没有被调用/没有响应
- sql - 在存储过程中没有得到预期的结果
- javascript - 如何检测 div 文本的变化?
- node.js - 在“npx create-react-app”“npm start”失败并出现以下错误后:TypeError: Cannot read property 'split' of undefined
- c# - 不可调用的成员“Vector3”不能像方法一样使用。Wander Ai 脚本出错
- reactjs - 如何使axios在具有启动和限制参数的react.js中动态获取请求?
- vim - 如何永久更改 vim 中的默认工作目录(在 Windows 10 上)?
- ubuntu - Tomcat9 中的 webapps 文件夹 - Ubuntu