2012-03-10 13 views
1

私はのJavaハッシュテーブル問題

HashTable ht1 = { (1, 100), (2, 200) } 

HashTable ht2 = { (1, 100), (2, 200) } 

HashTable value = { (100, null), (200, null) } 

それはJavaでHT1にポインタを格納し、点(及びアクセスすることができる)は、100及び200の代わりにHT2することが可能であり、そのような3つのハッシュテーブルを持っている100値ハッシュテーブルの200例、ht1 = {(1、pointer1)、(2、pointer2)}のような構造体が必要ですどこpointer1 ----)100(これは値のハッシュテーブルに格納されています)誰も私はどのようにこれを可能にすることができますか?私はJava inbuiltのHashtable構造を使用しています。ありがとう。

+2

ご質問をより詳細に説明してください。それよりも、達成しようとしていることを教えてください。 – AlanFoster

+0

@ AlanFoster、ht1 = {(1、pointer1)、(2、pointer2)}のような構造体が必要です。pointer1 ----)100(値ハッシュテーブルに格納されています)。 – Arpssss

答えて

3

コメント数カップル。 Hashtableは、Mapの要素への同期アクセスが必要な場合に便利です。そうでない場合は、HashMapが優先されます。

Javaでは「ポインタ」はありませんが、確かにオブジェクトにはの参照があります(Javaではすべてのオブジェクトが参照渡しではなく値渡されます)。また、オブジェクトへの参照を値としてMapに保存することもできます。私はC/C++のコンセプトをJavaのコンセプトと混同していると思いますが、 "ポインタ"で何をしたいのか正確に説明する必要があります。 -

念のためにあなたは、このようなJavaでこの一つとしてMap持つことができます。上記のコードで

Map<Integer, Integer> table = new HashMap<Integer, Integer>(); 

を、Mapのキーと値は参照Integerにオブジェクト、およびありますIntegerクラスは不変です。つまり、その値が変更されると値を変更することはできません。もちろん、Mapのキーで指し示される値を変更することはできます。

EDIT:

問題のサンプルはJavaで次のようになります。上記のコードで

Map<Integer, Integer> ht1 = new HashMap<Integer, Integer>(); 
ht1.put(1, 100); 
ht1.put(2, 200); 

Map<Integer, Integer> ht2 = new HashMap<Integer, Integer>(); 
ht2.put(1, 100); 
ht2.put(2, 200); 

Map<Integer, Integer> value = new HashMap<Integer, Integer>(); 
value.put(100, null); 
value.put(200, null); 

3つのマップ内のすべての整数は不変オブジェクトへの参照、次のとおりです。実際には番号100に見えるのはオブジェクトnew Integer(100)への参照であり、Integerは不変クラスなので、3つすべて参照new Integer(100)は、メモリ内の全く同じオブジェクトを指します。

あなたの質問に答えて:はい、100と200の代わりにポインタをht1とht2に格納することができます。ポインタは100と200の値のハッシュテーブルを指し示します(そしてアクセスすることができます)。実際にはそれはすでに起こっていることであり、それ以外の方法はありません。Javaのマップにはプリミティブ型(intなど)を保存できないため、参照のみです。また、Integerのすべてのインスタンスが不変であるとすれば、その値を変更することはできません。これを行うと、それらが共有され使用されている他の場所の値が変更されるからです。

+0

ありがとうございます。実際には、 'references'を使って別のHashTableに格納された値にアクセスし、 'references'を変更する必要はありません。 ht1 = {(1、pointer1)、(2、pointer2)}ここでpointer1 ----)100(値ハッシュテーブルに格納されています)。しかし、それらの参照を取得する方法は? – Arpssss

+0

質問は不明のままです、私は恐れています。 2つのハッシュテーブルがある場合は、ht1 = {(1、reference1)}とht2 = {(1、reference2)}としましょう。値は、特に両方とも、次のように同じ数を指すことができます:reference1 = reference2 = 100;両方の参照を値ハッシュテーブルのキーとして使用することができます。 –

+0

@Arpssss私は私の答えを編集しました、これは明らかです。 –

0

はい。 Integerを代わりに使用する場合は、ハッシュテーブルへの参照によって渡されます。

+0

簡単な例のJavaコードまたは擬似コードを使用して、それを親切に説明できますか? – Arpssss

0

はい。プリミティブintの代わりにIntegerとして保存する必要があります。 Integerは変更不可能なので、変更することはできません。それを変更すると、新しいオブジェクトが作成され、ht1ht2のポインタは、古いオブジェクトを指しています。

0

getterとsetterを使用してポインタをJavaBeanにラップするオブジェクトを格納します。内容を外部的に変更することができます。ラッパーへの参照は格納され、アクセスされ、HashMapの内容も変更されます。