5

私のコードでは、

for(City city : country.getCities()){
   // do some operations
}

country.getCities() を使用するとコストがかかりますか? JVM は呼び出しごとにスタックトレースを維持しますか?

List<City> cityList = country.getCities();
for(City city : cityList){
   // do some operations
}

最適な使用方法は何ですか?

4

5 に答える 5

9

いいえ、このループ:

for(City city : country.getCities())

country.getCities() 一度だけ呼び出してから、それを繰り返します。ループの繰り返しごとに呼び出されるわけではありません。あなたの場合、それは次と同等です:

for (Iterator<City> iterator = country.getCities().iterator();
     iterator.hasNext(); ) {
    City city = iterator.next();
    // do some operations
}

2 番目のスニペットのように書き直すメリットはありません。

詳細については、JLS のセクション 14.14.2 を参照してください。

于 2012-12-13T10:33:42.333 に答える
3

どちらの場合も、getCities()は 1 回だけ呼び出されます。

デフォルトの免責事項: いつものように、パフォーマンスについて心配する必要はほとんどありません。コンパイラは人間よりもはるかに優れているからです。

于 2012-12-13T10:34:08.717 に答える
1

これらは同等です。一度getCities()だけ実行されます。(そのメソッドに固執すると、これが表示されるはずです)。System.out.println()

getCities()パフォーマンス上の理由だけでなく、毎回同じコレクションを返すという保証がないため、複数回呼び出さないことに注意してください(同じコレクションを返すことは直感的かもしれませんが、必須ではありません)。

簡潔にするために、最初の例をお勧めします。

于 2012-12-13T10:34:10.017 に答える
0

どちらも同じです、違いはありません。ループcountry.getCities()内で 1 回呼び出されます。

余分な参照が使用されていないため、最初の方が良いと思います。

于 2012-12-13T10:34:33.763 に答える
0

JVM は、コンパイル時にコードを最適化し、country.getCities()メソッドが 1 回呼び出されるようにします。

あなたやあなたのチームが最も読みやすいと思う方法でコードを書くべきです。

于 2012-12-13T10:34:44.157 に答える