zoukankan      html  css  js  c++  java
  • LinkedList add remove get 代码分析

    add

      void linkLast(E e) { //e 要添加的元素
            final Node<E> l = last; // 最后一个元素
            final Node<E> newNode = new Node<>(l, e, null); //创建元素新节点
            last = newNode;
            if (l == null)// 如果最后一个节点null,说明是第一次add 元素
                first = newNode;  //将新的元素置第一个元素
            else
                l.next = newNode; // 如果最后一个节点不为null,就把新节点挂载最后一个节点的下面
            size++; //集合中真实的元素个数
            modCount++;// 操作数++
        }

    remove

    public E remove(int index) {
            checkElementIndex(index);
            return unlink(node(index));
        }
    
    // ===============================获取要删除的节点    
    Node<E> node(int index) {// index=2
            // assert isElementIndex(index);
    
            if (index < (size >> 1)) {
                Node<E> x = first;
    //遍历index 找到要删除的node
                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;
            }
        }
    // =================================删除元素
    E unlink(Node<E> x) {// x 要删除的节点
            // assert x != null;
            final E element = x.item;  // 获取要删除node的item
            final Node<E> next = x.next//获取要删除node.next
            final Node<E> prev = x.prev;////获取要删除node.prev
    
    // 处理delNode 的prev 节点
            if (prev == null) { // 如果没有上一个元素,就说明delNode是头节点,将delNode的next 节点置为first
                first = next;
            } else {
                prev.next = next; // 如果delNode有上一个节点,就将上一个节点的next 置为delNode的next。简单说就是delNode.next 替换 delNode的位置
                x.prev = null; // 将delNode 的prev 置为null
            }
    
    // 处理delNode 的next节点
            if (next == null) {// 说明delNode 是最后一个node
                last = prev; // 那么delNode 的prev 就是最后一个node
            } else {
                next.prev = prev; // 将prev 节点 关联到next.prev节点
                x.next = null; // 将delNode 的next置为null
            }
    
            x.item = null;// 将delNode 的item置为null
            size--; // 数组容量--
            modCount++; // 操作数据++
            return element; // 返回删除的node
        }
  • 相关阅读:
    c# 深拷贝与浅拷贝
    SQLServer性能优化 .net开发菜鸟总结
    Ajax自定义无刷新控件实现
    APScheduler库的详细用法
    catkin在centos中的安装
    第五次任务实现与项目总结第六组
    Javascript教程:获取当前地址栏url
    窗口处理问题
    HTML中area标签
    Asp.net中Frameset的使用小结
  • 原文地址:https://www.cnblogs.com/zhangXingSheng/p/10810169.html
Copyright © 2011-2022 走看看