2016-06-17 8 views
3

私は、Javaクラスのメソッドに似たロジックを持っています(実際のコードではありませんが、これは単純な例です)。これは非効率的である配列にJavaの値が含まれているかどうかを確認する最も効率的な方法は?

:PRを確認するために自分自身を割り当てられ

private Boolean method(Boolean booleanValue, SomeObject object) { 
    return booleanValue ? Arrays.asList(object.getStringsArray()).contains("string") : false; 
} 

協力者は、次のコメントを与えました。新しいデータ構造を作成して反復し、特定の文字列があるかどうかを確認します。

getStringsArray()方法はString[]返し、そうするためのループArrays.asList()より良く使用してのだろうか?

これを達成するために、どちらの方が効率的ですか?

+0

'Arrays.asList'はラッパーを返します。問題はありません。 'object.getStringsArray'は、それが何をするか、そしてこの文字列をチェックするためのより良い方法があるかどうかによって、問題になるかもしれません。恐ろしい方法です。 – user2357112

+1

最初の引数は完全に偽です。 – nucleon

+2

私はそれが非効率であることに同意します。 'List'オブジェクトは配列によってバッキングされているため、パフォーマンスの低下はありません。 [これを行う方法の標準的な答え](http://stackoverflow.com/a/4962413/5743988)でもこのメソッドが使用されています。 – 4castle

答えて

5

あなたのメソッドが新しいデータ構造を作成していると主張するとき、あなたの同僚は間違っています。あなたはArrays.asList()ためのAPIを見れば

は、それはそれ

は、指定された配列に連動する固定サイズのリストを返しますと言っています。

あなたはそれのまわりListをラップし、そのビルトインメソッドを使用することができたときに、配列を反復するために独自のコードを書くための理由はありません。

+0

ありがとう!私は別の解決策を考え出すことができないので、私は心配していました。 APIドキュメントでは、これについての証拠がもっとも良い方法です。 –

+0

別のSOの質問からの証拠が必要な場合は、[この人気のある回答](http://stackoverflow.com/a/1128728/5743988)を参照してください。これは実際にはその質問の重複かもしれません... – 4castle

関連する問題