2

次のネストされたハッシュマップがあります。

HashMap<Foo1, HashMap<Foo2, TObjectDoubleHashMap<Foo1>>> my_map;

には 100 万を超えるエントリがあり、TObjectDoubleHashmap生成には約 1 分かかります。毎回生成する必要がないようにファイルに保存するためのオプションは何ですか?

これまでのところ、実際のキーと値をテキスト ファイルに保存し、それをハッシュマップに再度読み込みましたが、それほど時間は節約されません。シリアル化を使用してオブジェクトとして保存するなど、より高速な方法はありますか? もしそうなら、キーをシリアライズ可能にするために何をしなければなりませんか?

4

2 に答える 2

2

シリアル化を使用してオブジェクトとして保存するなど、より高速な方法はありますか?

マップのシリアル化は、キーと一致する値を書き出すだけです。シリアライゼーションを使用するのは、自分で行うよりも高速ではありません。シリアル化されたデータの HashMap の説明は次のとおりです。

HashMap の容量 (バケット配列の長さ) が発行され (int)、サイズ (int、キーと値のマッピングの数)、それぞれのキー (オブジェクト) と値 (オブジェクト) が続きます。キーと値のマッピング。キーと値のマッピングは特定の順序で発行されません。

コードはこちらでご覧いただけます

キーをシリアライズ可能にするにはどうすればよいですか?

オブジェクトをシリアライズ可能にするには、Serializableインターフェースを実装します。も指定する必要があるでしょうserialVersionUID。フィールドを追加します。

private static final long serialVersionUID = 1L;
于 2012-05-28T05:19:07.317 に答える
0

Map<Foo1, Map<Foo2, Value>>値ごとに 2 つのキーを使用するために a を使用していますか?

その場合、ネストされたマップの代わりに Guava のテーブルを使用してみると、パフォーマンスが向上する可能性があります。これは、2 つのキーを値に関連付けるために設計されています。私の推測では、大量のハッシュ マップを作成することが、初期化時間のほとんどを占めています。

于 2012-05-28T05:48:45.517 に答える