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

  



相關文章
相關標籤/搜索