java - 链表中的节点(int索引)

标签 java collections linked-list bit-manipulation

有人可以解释一下LinkedList中方法node(int index)的逻辑吗?什么使位偏移量为 1:

(index < (size >> 1))

方法:

Node<E> node(int index) {

    if `(index < (size >> 1)) {
        Node<E> x = first;
        for (int i = 0; i < index; i++)
            x = x.next;
        return x;
    } else {
        Node<E> x = last;
        for (int i = size - 1; i > index; i--)
            x = x.prev;
        return x;
    }
}

感谢您的解答!

最佳答案

size >> 1相当于 size / 2

我猜这个函数找到了 node在索引x .

基本上,它的作用是比较 index与节点总数。

如果index < size/2然后它从0开始搜索至size/2

如果index > size/2然后它从size开始搜索至size/2

例如,如果您不比较 indexsize/2 ,您可能会循环整个列表,即 O(n) 。通过这样做,您可以将迭代次数减少一半。 (O(n/2))

关于java - 链表中的节点(int索引),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50297483/

相关文章:

java - 如何在 Java 中处理多个流?

java - 使用反射将字段值设置为 null

javascript - 添加两个链表并在javascript中的新链表讨论中输出结果

java - 如何重用使用相同支持迭代器的集合?

collections - 在 Java 中将枚举转换为映射

c - 链接列表。更改指针时,添加的节点中的另一个值也会更改

c++ - 可以在 C++ 中实现 XOR 链表而不会导致未定义的行为吗?

java - 如何解决 "operator * cannot be applied to java.lang.string"?

java - 我如何告诉 Spring 跳过加载基于属性的配置类?

collections - 我可以使用 NHibernate Criteria 将实体及其子集合投影到类上吗?