我不明白其中的区别

时间:2016-11-09 19:50:50

标签: java performance processing-efficiency

我正在使用此行查看一些Java代码

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

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

if (list.size() <= 4) {...}
他说这很重要,需要成为第一个。我不明白。也许如果它像

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

如果someVeryCostlyFunction()总是返回一些正数&gt; = 1,那么大多数时候你可以使用这两个大小,大小是预期的1.否则我看不出差异。我们应该检查效率。

1 个答案:

答案 0 :(得分:1)

具有以下两个条件的代码smells

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

也许作者有这样的想法:

  

如果列表中有少量元素为4或更少。

当前代码的更多内容允许满足条件,即使列表中没有元素 - 这很可能是错误的。

这种情况的另一个问题是使用magic number 4?
什么是如此重要以及为什么它不是5? 它应该是自我记录的,并且可以与代码中出现的其他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