一些评论。当您需要同步访问Map
中的元素时,Hashtable
非常有用,如果不是这种情况,则首选HashMap
。在Java中,我们没有“指针”,但当然我们有引用到对象(请记住,在Java中所有的对象都通过值传递,而不是通过引用)。是的,您可以将对象的引用存储为Map
中的值。我认为你把C/C++的概念和Java中的概念搞混了,也许你应该解释一下你想用“指针”做什么。
只是可以肯定 - 你可以有一个Map
像这样一个在Java中:
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
的所有实例都是不可变的,所以您无法更改它们的值,因为这样做会改变其他位置共享和使用的值。
你能否更完整地解释你的问题,或者你想要达到什么目的。 – AlanFoster 2012-03-10 22:14:56
@AlanFoster,我想要的结构像ht1 = {(1,pointer1),(2,pointer2)}其中指针1 ----)100(它存储在值散列表)。 – Arpssss 2012-03-10 22:19:41