2012-03-07 10 views
1

コード:Javaで地図を作成する方がよいでしょうか?

public class MyClass { 
private Map<Integer,String> myMap; 
........................... 


void methodFillMap(){ 
    myMap=new HashMap<Integer, String>(); 

    ..................... 
    } 
} 

など、より良い:

public class MyClass { 
private Map<Integer,String> myMap=new HashMap<Integer, String>(); 
........................... 


void methodFillMap(){ 
    myMap.put(.....); 

    ..................... 
    } 

} 

効率性と機能性により、同じマップを作成し、これらの2つの方法がありますか?

+2

「methodFillMap」を呼び出す頻度によって異なります。一度だけそれは問題ではない。 –

+0

はい、methodFillMapは100万回近く呼び出されました。 – user710818

+0

これは通常、ユースケースによって異なります。 2番目の方法では、古い項目を上書きしない場合に表示する場合を除き、最初に項目を追加する前に地図をクリアする必要があります。最初の方法は私が思うgcのための多くの弱い参照を残すかもしれません。それ以外にも、現代のJVMのためには、オブジェクトを作成するにはあまりペナルティはありません。 –

答えて

4

いいえ機能的に異なるわけではありません。最初のケースでは、methodFillMapメソッドが呼び出されるたびに新しいマップが作成され、古いマップからの情報は失われますが、2番目のケースではオブジェクトは情報とともに保持されます。

+0

しかし、私がmethodFillMap:myMap.clear()に追加する場合は同じでしょうか? – user710818

+0

上記のコードで何をしたいのかを明確にすることはできますか?機能的に彼らは今のところ別のことをしているから! –

+0

メソッドが呼び出されるたびにオブジェクトを作成するのは良くないと思われます。この方法は1 000 000回呼び出すことができます。しかし、私はそれについては分かりません。 – user710818

1

オブジェクト(マップ)を作成するための「時間ペナルティ」は、おそらく両方のケースで同じになります。質問は、 - インスタンス化をより速くするか、または掛け算をmethodFillMapにしたいですか?

+0

なぜ時間のペナルティが同じになるべきですか?マップはVMのいくつかのキャッシュに存在しますか? – user710818

+0

いいえ、どちらの場合でもインスタンス化する必要があります。 – MByD

+0

このメソッドは1 000 000回呼び出すことができます。オブジェクトが1 000 000回作成されることを意味しますか? – user710818

0

私はあなたが本当に必要なときにマップの新しいインスタンスを作成するので、最初の方法だと思うので、メソッド "methodFillMap"を呼び出さない場合は、未使用のインスタンスはありませんメモリ内のオブジェクト。

関連する問題