2016-04-13 5 views
2
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 
} 

私の質問は良いです:テスト方法(実績などについて)のユーティリティメソッドまたは同じロジックですか?utilメソッドと同じコードを書く方法のパフォーマンスの違い...?

答えて

3

パフォーマンスは忘れても差はありませんが、可能な限り小さなメソッドを作成してコードを維持しやすくしてください。メソッドからコードを抽出し、utilメソッドを使用します。

そしてもう一つは、あなたの方法は

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

そのforループの必要なしに低減することが可能です。リストにcontainsメソッドを使用してください

+1

'contains 'を使うと、ユーティリティメソッドは必要ありません。 ;) –

+0

@PeterLawrey Exactly;)これは単一行のコードです。 if(list.contains( "aaa")){// TODO がtrueを返す場合には便利です。 } ' –

+0

' else'が返されない場合は、指定しません。 ;) –

1

私の質問は、より良いユーティリティメソッドまたは同じロジックですか?

カスタムメソッドがユーティリティー1と同じロジックを実装している場合、性能の差はあまり重要ではありません。

私のアドバイスは:ホイールを再発明しないでください!

完全にテストされ、検証され、おそらく最適化されたものがある場合は、再使用してください。そうでなければ、あなた自身ですべてを再実装しようとすると、間違いやその他の問題を起こす可能性が大きくなります。

2

パフォーマンスに著しい違いはありません。

あなたは、より明確で維持しやすいと思われるものを行うべきです。

ほとんど違いがないのは、JITがインラインメソッドを使用でき、実行時に最適化された同じコードで終了するということです。

性能が重要なのは、大きなコレクションと時間の複雑さがある場合です。例えば。あなたがリストを使用している場合、これはあなたがHashSetのを使用している場合、これはO(1)操作する必要がありますしかしO(N)操作で

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

をしたいと言います。これは他のほとんどのことよりもはるかに大きな違いをもたらすことができます。

要するに、プロファイラが特定の場所に問題があることを示していない限り、O(1)またはO(log N)または非常に小さなコレクションに固執してください。コードが実行されます。

注:ユーティリティメソッドがインラインコードを実行できる状況があります。コードを最適化するには、コードを一定回数実行するか、一定回数ループさせる必要があります。

多くの場所から呼び出されるのでロット(または多くのループ)と呼ばれる方法は、同じコードよりも早く最適化されます(ループの正確な数、コールはVMおよびコンパイルの段階に依存します)多くの場所で繰り返された。

+1

thanx、確信しています... – Raghu

+0

@Raghuは、ユーティリティメソッドが多くの場所で使用されている場合に、より効果的な理由についての注釈を追加しました。 –

2

プログラミングで最も重要なルールの1つ:コードを複製しないでください。 これまで

プログラミングは新しい道路を建設するようなものです。過去に建設された各道路には今後メンテナンスが必要であることを人々は忘れています。

コードをコピーするたびに、何か違うことをしたいときにタッチする必要がある別の場所が作成されます。それに加えて、遅かれ早かれ、あなたの「重複コード」の部分が少しずつ異なってくることが分かっています(1つの場所を変更し、別の場所を忘れるか、ここで少し変更する必要があります。そこにはない)。そして、典型的には、微妙な違いを持つ重複したコードがたくさんあると...バグがあります。

短い説明:言語を理解し、JITがパフォーマンスチューニングについて考える前にどのように動作するかを理解してください。一方で、読みやすく保守しやすいコードを書くことに重点を置いています。他のものは巨大な時間の無駄です。

+1

完全な合意がここにあります。さらに、私はいつもユーティリティメソッド(例えばApache Commons Lang3のような)を使うつもりだと言いたいのですが、テストカバレッジが良いIFFです。ホイールを再発明する時間を節約するだけでなく、単体テストで独自のユーティリティメソッドをカバーすることもできます。 – grange

関連する問題