コメント数カップル。 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
のすべてのインスタンスが不変であるとすれば、その値を変更することはできません。これを行うと、それらが共有され使用されている他の場所の値が変更されるからです。
ご質問をより詳細に説明してください。それよりも、達成しようとしていることを教えてください。 – AlanFoster
@ AlanFoster、ht1 = {(1、pointer1)、(2、pointer2)}のような構造体が必要です。pointer1 ----)100(値ハッシュテーブルに格納されています)。 – Arpssss