2016-08-11 8 views
-7

DBのデータを格納するHashMapがあります。ユーザーは必ず反復の参照を作成する必要がありますか?Javaコレクション - リファレンス

Map<String, List<Employee>> **map** = Cache.getMap(key); 

for(Map.Entry<String, List<Employee>> me: map.entrySet()){ 

または:20スレッドの

for(Map<String, List<Employee>> me : Cache.getMap(key)){ 

最小時間内に任意の点でのキャッシュにヒットします。各発信者は、マップ内のデータの処理を完了するのに約500ミリ秒かかります。

これは、GCとスピードの観点から、上記2つの方が優れているオプションです。

また、上記のオプションよりも優れたオプションがありますか?どちらの場合も、expressionは、ループの先頭ではなく、各反復で一度だけ評価されるように、あなたが

IterableOrArray all=expression; 
for(ElementType element: all) { 
    … 
} 

または

for(ElementType element: expression) { 
    … 
} 

を書くかどうか

+0

クラスをローカルに作成し、マシンまたは環境でメトリックを取得します。良い運動の代替物はありません。 – randominstanceOfLivingThing

+0

「参照を作成する」というようなことはありません。最初の変種では、どちらの場合でも存在する参照を保持する変数を導入するだけです。それはコードが何をするかに影響を与えません。 2番目の変種の誤った構文を修正すると、結果は同じになります。 – Holger

答えて

0

は、任意の違いはありません。 。 Iterableの場合、結果コードがどのように式を再評価し、新しいIteratorに古いコードの前の位置で再開するように指示するかは想像もしません。

まだ疑問がある場合は、次の例のプログラムでそれを確認することができます。

public static void main(String[] args) { 
    for(String s: getTheCollection()) { 
     System.out.println(s); 
    } 
} 
static Iterable<String> getTheCollection() { 
    System.out.println("getTheCollection() called"); 
    return() -> { 
     System.out.println("iterator() called"); 
     return Stream.of("foo", "bar", "baz").iterator(); 
    }; 
} 

ほど差がGCとの差がない、全くありませんので、

public static void main(String[] args) { 
    String[] array={ "foo", "bar", "baz" }; 
    for(String s: array) { 
     System.out.println(s); 
     // has no consequences: 
     array=null; 
    } 
} 

スピードの観点からも

関連する問題