2012-03-04 3 views
3

私はJavaでステミングアルゴリズムを持っています。これは、スタティックコードHashMap<String, String>には、約30,000レコードがあらかじめ埋め込まれています。Java:静的に順序付けされた最終的なマップを初期化して塗りつぶす方法は?

レコードは、挿入された同じ順序でレコードを保持する必要があります(私はLinkedHashMapを使用できるヒントを得ましたか?)。

私は、これはRAMでそれらをロードする最も簡単な方法ですので、私は手動で

map.put("Key", "Value"); 
のような30回の000コールを使用することにより、(時間/生産性は、このプロジェクトのために非常に重要である)は、Javaのクラスファイルに値を挿入することができると思いました

問題は、java(または少なくともeclipse)はどのセグメント/メソッドなどでも65kbのコードしか許されないため、11個のクラスを拡張し、.putの65kbをコンストラクタまたはstatic { }に入れてしまいました。

すべては問題ありませんでしたが、私がそれを実行すると、注文はスクランブルされます。非常に多くの行については、どこが間違っていたのか、拡張された順序で、または地図内で追跡されません。

したがって、パフォーマンスに関して、Javaで最終的なマップを埋める最良の方法は何か教えてください。

P.S:読み込みとファイルからレコードを解析するにはあまりにも遅いです...

答えて

5

すべてが大丈夫だったが、私はそれを実行したときに順序がスクランブルされています。そのため、 多くの行では、どこが間違っていたかを追跡することができず、 オーダーまたは地図内で延長されました。

a)HashMapは挿入順序を保持しません。代わりにLinkedHashMapを使用してください。 または、定数として使用するので、Guava ImmutableMapを検討してください。それは挿入を保持し、不変であり、多くの値でそれを構築するためのビルダーオブジェクトを提供します。

B)P.S:ファイルからレコードをロードするにはあまりにも遅いです

...

なぜ?これは、クラスのロード時に1回だけ実行されます。 35K文字列と文字列のペアは、現代のマシンのデータではありません。

+0

はい、私は質問でそれについて話しましたが、それでもスクランブルされています。 –

+0

@トニー...「おそらく」は「a」よりも見た目が必要なので(これは「質問で話されました」 - すでにそうしています: - /)また、 * HashMapが作成されています...これは同じ1回限りの先行コストです。 –

+0

@pst trueですが、35000行の静的初期設定のクラスファイルを持っているのは私にとっては地獄のように聞こえるので、私は自分自身のために行きます! –

2

メモリデータベースで使用することを検討しましたか?(例:HSQLDB)あまりにも多くのデータをクラスにあらかじめ入力するのは正しくありません。