util方法与在方法中编写相同代码之间的性能差异......?

时间:2016-04-13 07:57:31

标签: java performance

private void test(){
   List<String> list=new ArrayList<>();
   list.add("aaa");
   list.add("bbb");
   list.add("ccc");

   //using utility
   boolean flag = Util.search(list,"bbb");
   flag = Util.search(list,"aaa");

   //using same code here only
   for(String obj:list){
      if(obj.equals("bbb")){
         return true;
      }
   }

   for(String obj:list){
      if(obj.equals("aaa")){
         return true;
      }
   }
   // util method has same logic as in the method for search
}

我的问题是哪个更好:实用方法或测试方法中的相同逻辑(例如关于性能)?

4 个答案:

答案 0 :(得分:3)

忘记性能,这是微不足道的差异,尽可能写出最小的方法,以便代码易于维护。从您的方法中提取代码并使用util方法。

还有一件事是你的方法可以减少为

if(list.contains("aaa")){
return true;
}

不需要for循环。使用列表

中的contains方法

答案 1 :(得分:2)

不应有任何明显的性能差异。

你应该做你认为更清晰,更容易维护的事情。

没有什么区别的原因是JIT可以内联方法,并且在优化后最终会在运行时使用相同的代码。

表现很重要的是当你有大量的收藏和不同的时间复杂性。例如。说你想做

if (words.contains("bbb"))
    return true;

如果使用List,则这是O(N)操作,但是如果使用HashSet,则应该是O(1)操作。与其他任何你能做的事情相比,这可以产生更大的差异。

简而言之,坚持O(1)或O(log N)或非常小的集合,你应该没问题,除非你的探查器表明你在特定的地方有问题,我不会再猜测如何代码将执行。

注意:有一种情况是实用程序方法可以执行内联代码。对于要优化的代码,它必须运行一定次数或循环一定次数。 (确切的循环次数,调用取决于VM和编译阶段)

从许多地方调用的一个被称为批次(或循环很多)的方法将比在许多地方重复的相同代码更快地进行优化。

答案 2 :(得分:2)

编程中最重要的规则之一:不重复代码。 决不。永远。

编程就像建设新的道路一样:人们会忘记过去建造的每条道路将来都需要维护。

每次复制代码时,您都会创建另一个可能需要触摸的位置。除此之外,许多研究迟早会发现你的重复代码&#34;碎片会开始略有不同(因为你改变了一个地方,你忘记了另一个地方;或者你需要在这里做一点改变;但只在这里;而不是那里)。通常情况下,如果你有很多重复的代码存在细微差别......那就是你会遇到错误的地方。

长话短说:了解语言,以及在考虑性能调优之前JIT如何工作。同时:专注于编写易于阅读和维护的代码。其他任何事情都是巨大的浪费时间。

答案 3 :(得分:1)

  

我的问题是哪种更好的实用方法或相同的逻辑?

如果您的自定义方法实现与实用程序方法相同的逻辑,则性能差异不应该非常重要。

我的建议是:不要重新发明轮子!

当您拥有经过全面测试,验证和优化的产品时,只需重复使用即可。否则,如果你试图自己重新实现一切,那么犯错和其他问题的可能性很大。