Java哈希表问题

时间:2012-03-10 22:10:11

标签: java hashtable

我有三个哈希表,

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

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

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

在Java中是否可以将指针存储在ht1和ht2中而不是100和200中,这些指针指向(并且可以访问)100和200的值哈希表。例如,我想要像ht1 = {(1,pointer1),(2,pointer2)}这样的结构,其中pointer1 ----)100(存储在值哈希表中)任何人都可以帮助我这怎么可能?我正在使用Java内置的Hashtable构造。感谢。

4 个答案:

答案 0 :(得分:3)

几条评论。当您需要对Hashtable中的元素进行同步访问时,Map非常有用,如果情况不是HashMap则是首选。

在Java中我们没有“指针”,但我们肯定有引用到对象(请记住,在Java中,所有对象都是通过值传递的,而不是通过引用传递的)。是的,您可以将对象的引用存储为Map中的值。我认为你把C / C ++中的概念与Java中的概念混淆了,也许你应该准确地解释你想用“指针”做些什么。

只是为了确定 - 你可以在Java中拥有一个Map这个:

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

在上面的代码中,Map的键和值是引用Integer个对象,而Integer类是不可变的,这意味着你一旦它到位就无法改变它的值 - 当然,你可以改变Map中一个键指向的值。

编辑:

问题中的示例在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);

在上面的代码中,三个映射中的所有整数都是引用到不可变对象:实际上看起来是数字100的是对象new Integer(100)的引用,因为Integer是一个不可变类,所有三个引用new Integer(100)都可能指向内存中完全相同的对象。

所以,回答你的问题:是的,在Java中可以将指针存储在ht1和ht2而不是100和200中,这指向(并且可以访问)100和200的值哈希表。事实上,这就是已经发生的事情,并且没有其他办法可以做到 - 因为Java中的地图不能存储基本类型(如int),只能存储引用。同样,鉴于Integer的所有实例都是不可变的,您无法更改它们的值,因为这样做会改变它们被共享和使用的其他位置的值。

答案 1 :(得分:0)

是。如果你使用Integer,因为它们通过引用传递给哈希表;

答案 2 :(得分:0)

是。您需要将其存储为Integer而不是原始int。请注意Integer是不可变的,因此您无法更改它。更改它会导致新对象,ht1ht2中的指针仍指向旧对象。

答案 3 :(得分:0)

使用getter和setter存储一个对象,该对象将您想要指针的值包装在JavaBean中。然后你可以在外部修改内容。可以存储和访问对包装器的引用,并且还将更改HashMap的内容。