2012-03-10 4 views
1

У меня есть три Hash Table, как, что,Java Hash Таблица Выпуск

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

+2

Не могли бы вы более подробно объяснить свой вопрос, а точнее, чего вы пытаетесь достичь. – AlanFoster

+0

@AlanFoster, мне нужна структура как ht1 = {(1, pointer1), (2, pointer2)} где pointer1 ----) 100 (которая хранится в значении hashtable). – Arpssss

ответ

3

Несколько комментариев. Hashtable полезен, когда вам нужен синхронизированный доступ к элементам в Map, если это не тот случай, когда HashMap является предпочтительным.

В Java у нас нет указателей, но у нас есть ссылки на объекты (помните, что в Java все объекты передаются по значению, а не по ссылке). И да, вы можете хранить ссылки на объекты как значения в Map. Я думаю, вы смешиваете концепции C/C++ с концепциями на Java, возможно, вам следует точно объяснить, что вы хотите делать с «указателями».

Просто, чтобы быть уверенным - вы можете иметь Map такие, как этот в Java:

Map<Integer, Integer> table = new HashMap<Integer, Integer>(); 

В приведенном выше коде, ключи и значения из Map являются ссылки на Integer объектов, и Integer Класс неизменен, что означает, что вы не можете изменить его значение, когда оно на месте, но, конечно, вы можете изменить значение, на которое указывает клавиша в Map.

EDIT:

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

+0

Спасибо. Фактически я хочу получить доступ к сохраненному значению в другой HashTable, используя «ссылки» и не нужно менять «ссылки». например, ht1 = {(1, pointer1), (2, pointer2)}, где указатель1 ----) 100 (который хранится на значении hashtable). Но как получить эти «ссылки»? – Arpssss

+0

Вопрос остается неясным, я боюсь. Все значения (и все ключи) в хэш-таблице Java являются _references_, и если у вас есть два хеш-таблицы, скажем, ht1 = {(1, reference1)} и ht2 = {(1, reference2)}), вы можете ссылаться на все, что хотите значения, в частности, оба могут указывать на одно и то же число, например: reference1 = reference2 = 100; и обе ссылки могут использоваться как ключи в значении хэш-таблицы. –

+0

@Arpssss Я отредактировал свой ответ, надеюсь, это ясно. –

0

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

+0

Можете ли вы любезно проиллюстрировать это, используя простой пример java-кода или псевдокода. – Arpssss

0

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

0

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