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;
        }  

  





posted @ 2015-09-21 13:36  长天秋水落霞孤鹜  阅读(1334)  评论(0编辑  收藏  举报