java - 我不明白其中的区别

标签 java performance processing-efficiency

我正在用这行代码检查一些 Java 代码

if ( list.size() == 1 || list.size() <= 4) {...}

我评论说我看不出这与只是做有什么不同

if (list.size() <= 4) {...}

他说这很重要并且需要成为第一位。我不明白。也许如果是这样的话

if (list.size() == 1 || list.size() <= someVeryCostlyFunction() ) {...}

如果 someVeryCoSTLyFunction() 总是返回一些正数 >= 1,则大多数情况下,大小预计为 1,您可能会同时使用两者。否则我看不到区别。我们应该检查效率。

最佳答案

代码smells满足这两个条件:

if (list.size() == 1 || list.size() <= 4)

也许作者也有这样的想法:

if there is some number of elements in the list that is 4 or less.

即使列表有零个元素,当前代码也允许满足条件 - 这很可能是错误的。

这种情况的另一个问题是使用 magic number 4?
它有何重要意义?为什么它不是 5? 它应该是 self 记录的,并与代码中可能出现的其他 4 区分开来:

int MAX_HANDLED = 4;
if ( list.size() > 0 && list.size() <= MAX_HANDLED )
:
:
int ALL_TIRES = 4;
if (car.getTires() < ALL_TIRES) {
  car.stop();
}

至于性能,我不认为现有条件应该比您建议的条件更快(即使当 list.size > 1 时第二个条件会更快)。看这个question也有类似的担忧。

关于java - 我不明白其中的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40514867/

相关文章:

mysql - Laravel 急切加载与显式连接

java - 如何从客户端向服务器发送和接收多个数据

java - 用Java读取Oracle时间戳并进行比较

performance - 英特尔 CPU 指令队列提供静态分支预测?

c++ - C++ 中的高效整数下限函数

vb.net - 高效码: short vs integer data types in VB.网

java - 写入文件的最快方法?

java - 取消 ThreadPoolExector 中的等待任务

javascript - 当位置(纬度/经度)更改时,缓慢更新 HereMaps DomIcon,重新渲染

c# - 不安全的每像素访问,30ms 访问 1756000 像素