Пара комментариев.Hashtable
полезно, когда вам нужен синхронизированный доступ к элементам в Map
, если это не так, предпочтителен 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)
указывают точнотот же объект в памяти.
Итак, отвечая на ваши вопросыon: yes в Java можно хранить указатели в ht1 и ht2 вместо 100 и 200, что указывает (и может иметь доступ) на 100 и 200 значений хеш-таблицы.Фактически это то, что уже происходит, и нет другого способа сделать это - потому что карты в Java не могут хранить примитивные типы (например, int
), только ссылки.И снова, учитывая, что все экземпляры Integer
являются неизменяемыми, вы не можете изменить их значение, поскольку это приведет к изменению значений в других местах, где они используются и используются совместно.