我有三个哈希表,
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构造。感谢。
答案 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
是不可变的,因此您无法更改它。更改它会导致新对象,ht1
和ht2
中的指针仍指向旧对象。
答案 3 :(得分:0)
使用getter和setter存储一个对象,该对象将您想要指针的值包装在JavaBean中。然后你可以在外部修改内容。可以存储和访问对包装器的引用,并且还将更改HashMap的内容。