一些評論。當您需要同步訪問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