2008-08-27 44 views
7

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

、個別に各ペアのオブジェクトのaddメソッドを呼び出すことなく、キー - >値のペアのリストを表に移入する方法はありますか?

答えて

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

両方のクラスは、java.utilパッケージから見つけることができます。 2の違いは、jGuru FAQ entryで説明します。

+1

+1、あなたはHashtableとHashMapの両方を指します。 – bgw

+0

jGuruエントリから: "2つの主な違いは、Hashtableへのアクセスはテーブル上で同期されているが、HashMapへのアクセスは同期されていないということです。違いは、HashMapの反復子はフェイルセーフであり、Hashtableの列挙子はそうではないということです。反復処理中にマップを変更すると、わかります。 – ErikAGriffin

2
import java.util.HashMap; 

Map map = new HashMap(); 
1

Edmundは語りました。ない慣用的に、いや、すべての時間を.add呼び出していないためとして

。本当にやりたいことがあれば、さまざまなハッキング(配列に格納してからループする)がありますが、私はそれをお勧めしません。

7

はまた、地図やHashtableの両方が(Collections frameworkで他のクラスのように)アップの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); 
0

、個別に各ペアのオブジェクトのaddメソッドを呼び出すことなく、キー - >値のペアのリストを表に移入する方法はありますか?

あなたの質問には、あなたのデータがどのような形式で始まっているかは言及されていません。ペアのリストがMap.Entryオブジェクトのリストであった場合、それはかなり簡単です。

ちょうどハッシュテーブルの拡張である(多くの中傷)という名前のクラスjava.util.Propertiesがあり、これをスローします。これは、文字列のキーと値だけを必要とし、ファイルやストリームを使用してデータをロードして格納することができます。次のように読み取りおよび書き込みファイルの形式は次のとおりです。

key1=value1 
key2=value2 

これはあなたが探しているものであれば、私は知りませんが、これは便利です状況があります。

19

二重カッコを使用してデータを設定できます。あなたはまだ追加呼び出し、または置くが、それはあまり醜いです:Javaのハッシュ関数が最適未満であることに注意することが重要である

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); 
}}; 
+1

あなたの変数の型は本当に 'Map'です。 'Map MYHASH =新しいハッシュテーブル()' –

0

。衝突を少なくし、〜50%の容量で再ハッシュをほぼ完全に排除するには、Buz Hashアルゴリズムを使用します。Buz Hash

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

"a".hash()はあなたに"a"のASCII表現与える - 97を、そう"b"98だろう。ハッシングの全体のポイントは、任意の「可能な限りランダムな」番号を割り当てることです。

あなたが迅速かつ汚いハッシュテーブルが必要な場合は、すべての手段によって、java.utilを使用しています。よりスケーラブルなものを探しているなら、私は自分自身を実装することに目を向けるでしょう。

関連する問題