Проблема с хэш-таблицей Java - PullRequest
1 голос
/ 11 марта 2012

У меня три хеш-таблицы:

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 (которая хранится в значении hashtable) Кто-нибудь может мне помочь, как это возможно?Я использую встроенную в Java конструкцию Hashtable.Спасибо.

Ответы [ 4 ]

3 голосов
/ 11 марта 2012

Пара комментариев.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 являются неизменяемыми, вы не можете изменить их значение, поскольку это приведет к изменению значений в других местах, где они используются и используются совместно.

0 голосов
/ 11 марта 2012

Храните объект, который оборачивает значение, на которое вы хотите указатель, в JavaBean с помощью методов получения и установки. тогда вы можете изменить содержимое извне. Ссылки на оболочку могут быть сохранены и доступны, а также изменят содержимое HashMap.

0 голосов
/ 11 марта 2012

Да.Вам нужно хранить его как Integer вместо примитива int.Обратите внимание, что Integer является неизменным, поэтому вы не можете его изменить.Его изменение приводит к появлению нового объекта, а указатели в ht1 и ht2 по-прежнему указывают на старый.

0 голосов
/ 11 марта 2012

Да.Если вместо этого вы используете Integer, так как они передаются по ссылке в хеш-таблицу;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...