0

キーまたはインデックスから2つの値を取得するdoubleテーブルが必要です。私はすでにこの質問を見てきましたが、パフォーマンスも考慮して、より良いアプローチが何であるかを知りたいです。

1)次の方法でHashMapを作成します。

HashMap<Integer, HashMap<String, String>> = ...;

このputメソッド内に値を入れる方法がわかりません。これがあり、Eclipseでエラーが発生しprueba.put(0, new Hashtable<"Hi", "Bye">);ます。ご覧のとおり、簡単な質問であると確信する前に、このようなものを使用したことはありません。

2)次の方法でHashMapを作成します。

HashMap<Integer, YourFancyDatatype>

そこで、1つのキーまたはインデックス内の1つのオブジェクトに必要な2つ以上の値をパックするクラスを作成します。

どちらがより良いパフォーマンスを発揮しますか?また、1)アプローチの使い方について教えていただければと思います。HashMapには約20000のエントリがあります。

お時間を割いていただき、ありがとうございました:)

4

5 に答える 5

3

単一のキーと値のコレクションを持つものが必要になります。Apache の MultiMapを使用することをお勧めします。この機能は既に実装されています。

于 2012-12-16T18:26:09.960 に答える
1

最初のアプローチでは、Guava のHashBasedTableによって提供されるものと同じデータ構造を使用するため、代わりに使用できます。

ただし、最高のパフォーマンスが必要な場合は、配列に基づいたものを使用してみてください (例: Guava のArrayTable )

とにかく、簡単なパフォーマンス テストを行って、どのソリューションのパフォーマンスが優れているかを確認することをお勧めします。

于 2012-12-16T18:38:23.230 に答える
0

「インライン」プットを実行したい場合は、次のように実行できます。

prueba.put(0, new HashMap<String, String>() {{put("Hi", "Bye");}});

これは、値をロードするインスタンスブロックを持つHas​​hMapの匿名サブクラスを採用しています。


これにより、JVM用に1つの追加クラス(MyClass $ 1などと呼ばれる)が作成されることに注意してください。

于 2012-12-16T18:24:00.193 に答える
0

この put メソッド内に値を入れる方法がわかりません。これがありますが、Eclipse でエラー prueba.put(0, new Hashtable<"Hi", "Bye">); が返されます。ご覧のとおり、私はこのようなものを使用したことがないので、簡単な質問だと確信しています。

まず、Hashtable<String, String>は のサブタイプではありませんHashMap<String,String>。あなたの HashMap はHashMap<String, String>値として a を期待しています。ハッシュマップを値に挿入するか、ハッシュマップ宣言を次のように変更します。

HashMap<Integer, ? extends Map<String, String>> = ...;

ただし、2番目のアプローチはよりオブジェクト指向です。したがって、2番目のアプローチを使用することをお勧めします

于 2012-12-16T18:25:34.050 に答える
0

このように、2番目の方がおそらくあなたの場合は簡単でしょう

HashMap<Integer, HashMap<String, FancyDataType>> h= ...;

これは、データを挿入する必要がある方法です

 h=HashMap<Integer, FancyDataType>     new Hashtable<Integer,FancyDataType>();
numbers.put(0, new FancyDataType("o","x"));
numbers.put(1, new FancyDataType("t","y"));
numbers.put(1, new FancyDataType("q","z"));
/// ...so one for all 20000

FancyDataType が次のようなものであると仮定します

class FancyDataType{
  String k,v;
  FancyDataType(String k,String v){
      this.k=k;this.v=v;

   }

} 
于 2012-12-16T18:25:44.990 に答える