2016-08-28 4 views
0

私のプログラムはログを検索し、いくつかのイベントが発生する回数(各イベントに関連付けられたバイト数)を数えます。関心のあるイベントを(キー、値1、値2)として格納したい場合は、文字列がキーであり、値は2つのlongです。キー配列が構造内に存在するかどうかを調べることができる必要があり、2つの長い値を変更できる必要があります。Javaでの作成、検索、および変更(key、value1、value2)の最良の方法

私はデータベースルートに移動したり、別のテキストファイルにデータを格納したりしません。

私はStack Overflow検索を使用して何かを見つけることに成功せず、Oracleのチュートリアルとコレクションのドキュメントはほとんど役に立ちませんでした。私のオプション(私はそれを理解して)、次のとおりです。

  1. (文字列、配列)からなるマップ
  2. (私はlongと背中に文字列をみだらな行為)2次元配列
  3. タプルオブジェクト

優れている可能性のある他の解決策を見落としていますか?もしそうでなければ、あなたは私が使っていると示唆していますか?

ありがとうございます!

+0

なぜ私はハッシュマップが単に仕事をしないのか分かりません。複雑ではないようです。 –

+0

@VicSeedoubley oracleドキュメントでは、「各キーは最大で1つの値にマップできます」という2つの値にマップするキーが必要です。 http://docs.oracle.com/javase/6/docs/api/java/util/Map.htmlを参照してください。私は文字列キーとタプルを持つ地図が行く方法だと思う(Aaron Davisの答え)。 – Mike

+0

はい、それは単純なハッシュマップの意味です。値のタプルを格納するか値を格納することはあまり変わらない –

答えて

2

あなたが「最高の」ということを言うのは難しいですが、これは私がやることです。私は文字列キーと単純なタプルオブジェクトの値を持つマップを持っています。あなたはより良いパフォーマンスを手動で得ることができるかもしれませんが、マップのコレクション実装を使用するのが最も簡単です。そして、もっと重要なことは、誰が後でそれを読み書きする必要があるのか​​を理解することが最も簡単です。また、時期尚早の最適化に注意してください。 :-)

0

同じように好ましくない場合、#2のオプションは、128ビットのBigIntegerを使用することです。

// set 
map.put(key, new UUID(value1, value2); 
// get 
value1 = map.get(key).getMostSignificantBits(); 

最も「適切な」ソリューションは、一般的に作成するために、次のようになります。より良いオプションは、まだ少しハックが、それは簡単に上位と下位長い値にアクセスすることができた、UUIDを使用することです値が表すものとそれらがどのように関連しているかを伝えるカスタムクラス。関係がなく、共通のキーを共有するだけの場合は、値のセットごとに別々のマップを保持する価値があります。

関連する問題