java - 引入中间列表是否会导致性能开销?

标签 java list

List<UserData> dataList = new ArrayList<>();
List<UserData> dataList1 = dataRepository.findAllByProcessType(ProcessType.OUT);
List<UserData> dataList2 = dataRepository.findAllByProcessType(ProcessType.CORPORATE_OUT);
dataList.addAll(dataList1);
dataList.addAll(dataList2 );
return dataList ;

对比

List<UserData> dataList = new ArrayList<>();
dataList.addAll(dataRepository.findAllByProcessType(ProcessType.OUT));
dataList.addAll(dataRepository.findAllByProcessType(ProcessType.CORPORATE_OUT));
return dataList ;

第一个实现会导致任何性能开销吗? (即比第二个垃圾/内存分配更多)

附言- 是的,正如@Tim 所提到的,它可以使用到数据库的一次往返来优化。但这不是我正在寻找的答案。我一般想知道这种类型的实现是否会导致开销。因为这种实现有助于调试。

最佳答案

我要说不,因为如果这两个代码块产生不同的字节码我会感到非常惊讶。

第一个代码没有“引入一个中间列表”。它所做的只是创建新变量以引用由 dataRepository 调用创建的列表。我希望编译器简单地优化这些变量。

这些列表也是在第二个代码示例中创建的,因此没有真正的区别。

知道编译器执行这些类型的优化后,我们作为程序员可以自由编写布局良好、清晰且可维护的代码,同时仍然相信它会表现良好。

另一个考虑因素是调试。在第一个代码块中,很容易在变量声明行上设置断点,并检查变量的值。当代码在第二个代码块中实现时,这些简单的操作变得很痛苦。

关于java - 引入中间列表是否会导致性能开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57941551/

相关文章:

java - Android - 仅在版本 5.0+ 中覆盖 RelativeLayout 中的 TextView 的按钮

html - 在 CSS 中设置宽度的嵌套列表意外 block 定位

Python 如何使用枚举和列表跳过第一次(即零次)迭代?

java - 如何通过从 Java 传递参数来运行 lisp 脚本

java - MRUnit 在 hbase 结果对象中传递值

java - 在oracle中的数字字段中输入空值

python - 将非零 numpy 数组元素附加到列表的最快方法

list - 将函数 List 写入元组

android - 使Flutter中的重复列表值变为DISTINCT

Java Treemap和ArrayList传递项