java - 如果方法参数是原始 int,那么方法内循环内的 myArrayList.contains(primitiveArg) 效率极低还是可以?
问题描述
我有这样的代码:
public int getDistanceToNumber(int number) {
List<Integer> tuple5 = null;
int distanceCounter = 0;
for (int i = 0; i < allDraws.size(); i++) {
tuple5 = allDraws.get(i).getTupleAsList();
if (tuple5.contains(number)) { // autoboxing primitive ?
}
}
return 0;
}
问题是 - 我应该让方法参数 Integer 像int getDistanceToNumber(Integer number)
从原始到 Integer 的自动装箱只发生一次,还是没有性能问题。
循环内的这段代码运行了超过 10 万次......
解决方案
您应该在JMH下进行测试。
- 您可以通过使用
Integer.valueOf(int)
一次并将其传递给List::contains(Object)
. - 编译器可能足够高效,可以理解
number
永远不会更改的内容并为您执行此操作。
其余的,如果没有更多信息(类型allDraws
?),在装箱转换之前可能还有其他优化要做。
推荐阅读
- android - Android Sqlite App 在 Android pie 及以上崩溃 Gives SQLiteDiskIOException (code 522)
- c# - Newtonsoft.Json 字符串到 JSON 的转换问题
- node.js - Azure 函数忽略 https.request
- bash - Azure Pipelines Shell 脚本任务未执行
- javascript - 如何限制来自firestore的浏览器缓存中的离线数据
- python - 滚动 OLS 回归和 ValueError:值的长度与索引的长度不匹配
- spring - 如何使用 ReadBodyPredicateFactory 缓存有效负载数据
- c# - 如何从数据集表创建文本框 autoCompleteSource?
- angularjs - $watch 不为嵌入指令触发
- javascript - 如何从此中间件访问请求正文?