Java get () заменяет инициализированные ключи Hashtable на Null - PullRequest
0 голосов
/ 05 апреля 2020

В настоящее время у меня проблема с методом get (), используемым с хеш-таблицами.

Мой код инициализации:

        Hashtable<Integer, pageEntry> pageTable = new Hashtable<Integer, pageEntry>();
        Hashtable<Integer, LinkedList<Integer>> lookAhead = new Hashtable<Integer, LinkedList<Integer>();

        //Initialize pageTable and co.
        for(int i = 0; i < 10; i++) {
            pageEntry p = new pageEntry();
            pageTable.put(i, p);
            lookAhead.put(i, new LinkedList<Integer>());
        }

, когда я использую System.out.println(lookAhead);, вывод следует:

{0=[]}
{1=[], 0=[]}
{2=[], 1=[], 0=[]}
{3=[], 2=[], 1=[], 0=[]}
{4=[], 3=[], 2=[], 1=[], 0=[]}

Если я использую System.out.println(lookAhead.get(0)), вывод будет следующим:

[]
[]
[]
[]
[]

Однако, если я использую System.out.println(lookAhead.get(3)), выход изменится на

null
null
null
[]
[]

Есть ли какая-то причина, по которой я упускаю из виду, почему она меняет мои значения на ноль?

Спасибо за ваше время.

Ответы [ 2 ]

2 голосов
/ 05 апреля 2020

Метод get возвращает null, когда ключ отсутствует на карте.

В первые 3 итерации ключ не присутствует на карте. Он добавляется на 4-й итерации, и в выходных данных отображается значение, связанное с ключом, начиная с 4-й итерации.

0 голосов
/ 05 апреля 2020

Это зависит от того, куда вы обратились lookAhead.get(3)

Когда вы используете lookAhead.get(0), программа печатает пустые связанные списки, которые были инициализированы с индексом '0' в вашей HashTable.

Вы бы получили доступ к местоположению индекса 3 (lookAhead.get(3)) вообще без инициализации. Итак, программа печатает ноль для несуществующих ключей.

...