12

Javaでハッシュテーブル(または連想配列...)を作成する最も簡単な方法は何ですか? 私のgoogle-fuはいくつかの例を見つけましたが、これを行う標準的な方法はありますか?

また、各ペアのオブジェクトで add メソッドを個別に呼び出さずに、キーと値のペアのリストをテーブルに入力する方法はありますか?

4

8 に答える 8

27
Map map = new HashMap();
Hashtable ht = new Hashtable();

どちらのクラスも java.util パッケージにあります。2 つの違いは、次のjGuru FAQ エントリで説明されています。

于 2008-08-27T01:40:43.020 に答える
22

二重中括弧を使用してデータを設定できます。引き続き add または put を呼び出しますが、見苦しくはありません。

private static final Hashtable<String,Integer> MYHASH = new Hashtable<String,Integer>() {{
    put("foo",      1);
    put("bar",      256);
    put("data",     3);
    put("moredata", 27);
    put("hello",    32);
    put("world",    65536);
 }};
于 2008-08-28T07:34:55.953 に答える
7

また、Map と Hashtable の両方が Java 5 以降では汎用であることも忘れないでください (コレクション フレームワークの他のクラスと同様)。

Map<String, Integer> numbers = new HashMap<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);

Integer one = numbers.get("one");
Assert.assertEquals(1, one);
于 2008-08-27T02:07:29.303 に答える
2
import java.util.HashMap;

Map map = new HashMap();
于 2008-08-27T01:38:38.453 に答える
1

エドマンドが言ったこと。

常に .add を呼び出さないことに関しては、いいえ、慣用的ではありません。本当にやりたい場合は、さまざまなハック (配列に格納してからループ) を実行できますが、お勧めしません。

于 2008-08-27T01:45:32.307 に答える
0

また、各ペアのオブジェクトで add メソッドを個別に呼び出さずに、キーと値のペアのリストをテーブルに入力する方法はありますか?

あなたの質問の問題点の 1 つは、そもそもデータがどのような形式であるかについて言及していないことです。ペアのリストがたまたま Map.Entry オブジェクトのリストである場合、それは非常に簡単です。

これを捨てるために、Hashtableの拡張であるjava.util.Propertiesという名前の(非常に悪意のある)クラスがあります。文字列のキーと値のみを想定し、ファイルまたはストリームを使用してデータをロードおよび保存できます。読み書きするファイルの形式は次のとおりです。

key1=value1
key2=value2

これがあなたが探しているものかどうかはわかりませんが、これが役立つ状況があります。

于 2008-08-27T15:15:37.570 に答える
0

Java のハッシュ関数は最適ではないことに注意することが重要です。衝突を減らし、最大 50% の容量で再ハッシュをほぼ完全に排除したい場合は、Buz Hash アルゴリズムBuz Hashを使用します。

Java のハッシュ アルゴリズムが弱い理由は、文字列をハッシュする方法に最も明白です。

"a".hash()"a"-のASCII表現を与える97ので、そう"b"なるでしょう98。ハッシュの全体的なポイントは、任意の「できるだけランダムな」番号を割り当てることです。

手早く汚いハッシュテーブルが必要な場合は、必ず を使用してjava.utilください。よりスケーラブルで堅牢なものを探している場合は、独自の実装を検討します。

于 2012-10-26T02:57:06.930 に答える