zoukankan      html  css  js  c++  java
  • List的数据结构

    从这张图片说起:TreeList的实现结构:
    首先是构建函数 TreeList(Collection coll),调用增加函数:
    public void add(int index, Object obj) {
            modCount++;
            checkInterval(index, 0, size());
            if (root == null) {
                root = new AVLNode(indexobjnullnull);
            } else {
                root = root.insert(indexobj);
            }
            size++;
        } 
    //由此可以看出,Treelist采用的是平衡二叉树的实现的方式 ,并且以根节点作为成员变量,首先是AVL的数据结构:
    static class AVLNode {
            /** The left child node or the predecessor if {@link #leftIsPrevious}.*/
            private AVLNode left;
            /** Flag indicating that left reference is not a subtree but the predecessor. */
            private boolean leftIsPrevious;
            /** The right child node or the successor if {@link #rightIsNext}. */
            private AVLNode right;
            /** Flag indicating that right reference is not a subtree but the successor. */
            private boolean rightIsNext;
            /** How many levels of left/right are below this one. */
            private int height;
            /** The relative position, root holds absolute position. */
            private int relativePosition;
            /** The stored element. */
            private Object value;
    }
    节点的新建:
     private AVLNode(int relativePosition, Object obj, AVLNode rightFollower, AVLNode leftFollower) {
                this.relativePosition = relativePosition;//相对的位置,index来进行标注
                value = obj;
                rightIsNext = true;
                leftIsPrevious = true;
                right = rightFollower;
                left = leftFollower;
            }  
    新建完成,根节点的建立,下一步就是继续的增加,采用的是插入的方式:
    AVLNode insert(int index, Object obj) {
                int indexRelativeToMe = index - relativePosition;
                if (indexRelativeToMe <= 0) {
                    return insertOnLeft(indexRelativeToMeobj);
                } else {
                    return insertOnRight(indexRelativeToMeobj);
                }
    }
    首先我们看 插入左节点:
     private AVLNode insertOnLeft(int indexRelativeToMe, Object obj) {
                AVLNode ret = this;
                if (getLeftSubTree() == null) {
                    setLeft(new AVLNode(-1, objthisleft), null);
                } else {
                    setLeft(left.insert(indexRelativeToMeobj), null);
                }
                if (relativePosition >= 0) {
                    relativePosition++;
                }
                ret = balance();
                recalcHeight();
                return ret;
            }  

      





  • 相关阅读:
    Ad-papers
    《wifi深入了解抓包分析密码破解》
    《Linux内核分析-内核源码,写操作系统,gdb,系统调用》
    《C/C++ 高级开发 与Linux内核源码探析 提高班(王保明老师)【2】》
    《C/C++ 高级开发 与Linux内核源码探析 提高班(王保明老师)》
    《【公开课】斯坦福李飞飞教授最新cs231n计算机视觉经典课程》
    Tensorflow 介绍和安装
    卷积的发展历程,原理和基于 TensorFlow 的实现
    一文彻底搞懂BP算法:原理推导+数据演示+项目实战(上篇)
    基于深度学习的计算机视觉应用之目标检测
  • 原文地址:https://www.cnblogs.com/zhailzh/p/4825910.html
Copyright © 2011-2022 走看看