• js中实现ArraryList


    /**********************************************************
      * JavaScript实现的ArrayList类 
      * 
      * @author {yangl}
      * @version $Revision: 0.5 $ $Date: 8/04/15:00:$
      * @description
      * Method:
     * add(element);
     * addElementAt(index, element);
     * contains(element);
     * get(index);
     * isEmpty(index);
     * indexOf(element);
     * lastIndexOf(element);
     * remove()
     * setElementAt(index, element);
     * size();
     * toString();
     * toArray();
     * @example
     * var arrList = new ArrayList();
     * //var arrList = new ArrayList(10);
     * arrList.add("");
     * arrList.add("");
     * arrList.add("");
     *
     *********************************************************/
     // JavaScript ArrayList
     /**
     Method:
            add(element);
            addElementAt(index, element);
            contains(element);
            get(index);
            isEmpty(index);
            indexOf(element);
            lastIndexOf(element);
            remove(index);
            setElementAt(index, element);
            size();
            toString();
     */
     /**
     Example:
            var arrList = new ArrayList();
            //var arrList = new ArrayList(10);
            arrList.add("");
            arrList.add("");
            arrList.add("");
     */
    var ArrayList = function () {
        var args = ArrayList.arguments;
        var initialCapacity = 10;
    
        if (args != null && args.length > 0) {
            initialCapacity = args[0];
        }
    
        var elementData = new Array(initialCapacity);
        var elementCount = 0;
    
        this.size = function () {
            return elementCount;
        };
    
        this.add = function (element) {
            //alert("add");
            ensureCapacity(elementCount + 1);
            elementData[elementCount++] = element;
            return true;
        };
    
        this.addElementAt = function (index, element) {
            //alert("addElementAt");
            if (index > elementCount || index < 0) {
                alert("IndexOutOfBoundsException, Index: " + index + ", Size: " + elementCount);
                return;
                //throw (new Error(-1,"IndexOutOfBoundsException, Index: "+index+", Size: " + elementCount));
            }
            ensureCapacity(elementCount + 1);
            for (var i = elementCount + 1; i > index; i--) {
                elementData[i] = elementData[i - 1];
            }
            elementData[index] = element;
            elementCount++;
        };
    
        this.setElementAt = function (index, element) {
            //alert("setElementAt");
            if (index > elementCount || index < 0) {
                alert("IndexOutOfBoundsException, Index: " + index + ", Size: " + elementCount);
                return;
                //throw (new Error(-1,"IndexOutOfBoundsException, Index: "+index+", Size: " + elementCount));
            }
            elementData[index] = element;
        };
    
        this.toString = function () {
            //alert("toString()");
            var str = "{";
            for (var i = 0; i < elementCount; i++) {
                if (i > 0) {
                    str += ",";
                }
                str += elementData[i];
            }
            str += "}";
            return str;
        };
    
        this.get = function (index) {
            //alert("elementAt");
            if (index >= elementCount) {
                alert("ArrayIndexOutOfBoundsException, " + index + " >= " + elementCount);
                return;
                //throw ( new Error( -1,"ArrayIndexOutOfBoundsException, " + index + " >= " + elementCount ) );
            }
            return elementData[index];
        };
    
        this.remove = function (index) {
            if (index >= elementCount) {
                alert("ArrayIndexOutOfBoundsException, " + index + " >= " + elementCount);
                //return;
                throw (new Error(-1, "ArrayIndexOutOfBoundsException, " + index + " >= " + elementCount));
            }
            var oldData = elementData[index];
            for (var i = index; i < elementCount - 1; i++) {
                elementData[i] = elementData[i + 1];
            }
            elementData[elementCount - 1] = null;
            elementCount--;
            return oldData;
        };
    
        this.isEmpty = function () {
            return elementCount == 0;
        };
    
        this.indexOf = function (elem) {
            //alert("indexOf");
            for (var i = 0; i < elementCount; i++) {
                if (elementData[i] == elem) {
                    return i;
                }
            }
            return -1;
        };
    
        this.lastIndexOf = function (elem) {
            for (var i = elementCount - 1; i >= 0; i--) {
                if (elementData[i] == elem) {
                    return i;
                }
            }
            return -1;
        };
    
        this.contains = function (elem) {
            return this.indexOf(elem) >= 0;
        };
    
        this.toArray = function () {
            var resultArray = new Array(this.size());
            for (var i = 0; i < this.size(); i++) {
                resultArray[i] = elementData[i];
            }
            return resultArray;
        };
    
        function ensureCapacity(minCapacity) {
            var oldCapacity = elementData.length;
            if (minCapacity > oldCapacity) {
                var oldData = elementData;
                var newCapacity = parseInt((oldCapacity * 3) / 2 + 1);
                if (newCapacity < minCapacity) {
                    newCapacity = minCapacity;
                }
                elementData = new Array(newCapacity);
                for (var i = 0; i < oldCapacity; i++) {
                    elementData[i] = oldData[i];
                }
            }
        }
    };
  • 相关阅读:
    用C#实现在线升级
    wordwrap,wordbreak,whitespace,textoverflow的区别和用法[转]
    Sql Server 存储过程分页大全(2005,2000)
    C#中生成中文繁体web页面
    如何在c#里执行sql server DTS包
    asp.net采集函数(采集、分析、替换、入库)
    css定义一个导航栏
    mssql与access的sql语法差异
    [转]sql server数据库定时自动备份
    HttpHandler与图片盗链
  • 原文地址:https://www.cnblogs.com/kinpauln/p/2614938.html
Copyright © 2020-2023  润新知