2014-12-10 3 views
4

Я делаю двойную ссылку, в которой узел сначала вставлен в список ссылок, и каждый узел содержит три свойства: question_id(int), Skip_logic(Boolean) и nextnode(int). Теперь, если верно значение skip_logic, узел проверяет следующий номер Q_id и переходит к этому узлу с конкретным идентификатором. Вот пример.Список ссылок в hashmap java

-------- <--- ---------- <---- --------- <----- --------- 
    | Node1 | ----> | Node 2 | -----> | Node 3 | -----> | Node 4 | 
    --------   ----------   ---------   --------- 

Теперь поток подобен этому после вставки. Теперь, если узел 1 содержит skip_logic=true. Он проверяет значение nextnode. Скажем, например, это 4, поток становится таким.

--------   ---------- <---- ---------   --------- 
    | Node1 | <---- | Node 2 | -----> | Node 3 | -----> | Node 4 | 
    --------   ----------   ---------   --------- 
    ^              ^
     |               | 
     ------------------------------------------------------------ 

Теперь предположит, что, например, пользователь хочет, чтобы перейти от узла 1 к узлу 2. Пользователь снова должен сначала найти узел с этим конкретным вопросом идентификатором из всего списка. Теперь это не стоит дорого в этом scenerio, но если нам нужно перейти от узла 1 к узлу 1000, это потребует большой стоимости поиска, и ссылка сломана, и вы создали ссылку также и добавили еще один указатель, который содержит ссылку на оба пути, но стоимость поиска по-прежнему существует. Я реализовал эту часть, но стоимость поиска - это то, чего я хочу избежать. Я собираюсь сохранить связанный список в hashmap, чтобы, если пользователь хочет добраться до определенного узла, он может просто ввести узел, и он перенесет его на определенный узел. Но проблема в том, что мне нужно подключить узлы внутри хэш-карты с другими узлами, и я думаю, что потребуется еще немного памяти. Итак, любые идеи, как я должен это делать, и если этот подход в порядке, и я должен пойти с ним? И нет, это не домашнее задание.

+0

У вас есть несколько вверх голосов, поэтому он должен быть мне быть толстым, но я могу» Посмотрите, чего вы пытаетесь достичь. Можем ли мы увидеть некоторые примеры использования этой структуры данных. Как код/​​код sudo, абзацы сплошного текста не ясны (по крайней мере, для меня). – weston

ответ

3

Я не уверен, что получил ваше объяснение полностью, но LinkedHashMap может быть хорошим кандидатом для ваших требований. Это HashMap, который также поддерживает связанный список записей в порядке добавления ключей к карте. Поэтому, если вы перебираете keySet, вы получаете ключи по порядку вставки.

+0

Да, я уже проверил его, но он не соответствует функциям, связанным с обратным узлом. – soldiershin

+0

@soldiershin Что такое «функциональность, связанная с дополнительным узлом»? – weston

+0

Я имел в виду, что я устанавливаю следующий и задний указатель любого узла во время выполнения. Но hashmap сохраняет следующую и заднюю части по тому, как они вставлены в начале. – soldiershin

Смежные вопросы