1

私は基本的に、HashMaps を作成するのにどれだけのメモリが使用されるのか疑問に思っています。

Object取得時に型とキャストの HashMap を作った方が良いでしょうか?または、保存したいさまざまなタイプに対して多くの HashMap を作成しても問題ありませんか?

例:

HashMap<Integer,Type1> map1;
HashMap<Integer,Type2> map2;
HashMap<Integer,Type3> map3;

HashMap<Integer, Object> map;
// And getting it by
(Type1)map.get(Integer); //or (Type2), etc
4

4 に答える 4

2

HashMapオブジェクトの値を持つ を作成することは避けます。の一般的な機能を利用HashMapして、コード内のいたるところにキャストが含まれないようにします。メモリに関しては、HashMap必要に応じてメモリの問題を使用して問題を解決し、問題が発生したら対処します。ほとんどの通常の初期化でHashMapは、メモリの問題は発生しません。

于 2013-03-12T00:31:35.277 に答える
1

これらのHashMapをどのように使用するかが重要です。複数のタイプの値を格納し、1セットのキーを使用する場合は、1つのHashMapを使用する必要があります。複数のタイプの値を保存し、タイプごとに異なるキーのセットを使用する場合は、複数のマップを使用する必要があります。

100個のHashMapと1個のHashMapのメモリコストの違いはかなり小さいです。気付く最大のことは、小さなHashMapがたくさんある場合(たとえば、各マップに2つまたは3つの値しかない何千ものマップ)、デフォルトのコンストラクターは最大16の値を期待するため、多くのスペースを浪費することです。 。これを修正するには、HashMapsを予想されるサイズで初期化します。

HashMap<Foo> fooMap = new HashMap<Foo>(5);
于 2013-03-12T00:41:06.147 に答える
0

私はそれが洗濯のようなものになるだろうと言うでしょう. 複数のマップを使用すると、複数のオブジェクトと複数のハッシュテーブル (最小限の「オーバーヘッド」があります) がありますが、特定のサイズを超えると初期コストが「埋められ」、複数のテーブルのハッシュがわずかに速くなります。

ただし、キャストのオーバーヘッドに違いはありません。ジェネリックを使用するとキャストが存在し、隠されているだけだからです。

于 2013-03-12T00:36:44.807 に答える
0

JVM はそれを認識していないため、実行時にハッシュマップの「タイプ」が何であるかは問題ではありません。

于 2013-03-12T00:31:48.300 に答える