java - hashmap java中的链表

标签 java linked-list hashmap

我正在创建一个双向链接,其中节点首先插入到链接列表中,每个节点包含三个属性,分别是 question_id(int)Skip_logic(Boolean)nextnode(int)。现在,如果 skip_logic 为真,节点将检查下一个节点 Q_id 并移动到具有特定 ID 的节点。这是一个例子。

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

现在插入后的流程是这样的。现在如果节点 1 包含 skip_logic=true。它检查下一个节点值。比如说是4,流程就变成了这样。

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

现在举例来说,用户想要从节点 1 转到节点 2。用户必须再次从整个列表中首先找到具有该特定问题 ID 的节点。现在在这个场景中它的成本并不高,但是如果我们必须从节点 1 跳转到节点 1000,则需要大量的搜索成本并且链接已断开并且您也创建了一个链接并添加了另一个包含的指针链接到两条路径,但搜索成本仍然存在。我已经实现了这部分,但我想避免搜索成本。我正在考虑将链表存储在散列图中,这样如果用户想要到达特定节点,他只需输入该节点即可将其带到特定节点。但问题是我必须将 hashmap 内的节点与其他节点连接起来,我猜这会占用更多内存。所以有什么想法我应该如何去做,如果这种方法没问题我应该接受吗?不,这不是作业。

最佳答案

我不确定我是否完全理解您的解释,但是 LinkedHashMap 可能很适合您的要求。它是一个 HashMap,它还按照键添加到映射的顺序维护条目的链接列表。因此,如果您遍历 keySet,您将按插入顺序获取键。

关于java - hashmap java中的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27397579/

相关文章:

java - 如何调整 JFrame 的大小,以便组件也根据用户的大小扩大或缩小?

c - C语言如何在不交换数据的情况下交换链表中的节点?

Java HashMap 和底层 values() 集合

java - HashMap 中的类(而不是对象)

java - Selenium FirefoxDriver 连接被拒绝

java - Google JIB 创建的 Docker Image 不包含 spring rest 文档的 asciidoc

java - 当我运行以下代码时,它抛出异常,为什么?

c - 双链表;新手尝试

c - 链表删除导致 Free Heap block ........ 被释放后在 .... 处修改

java - 如何循环调用函数显示文件之间的父子关系