专注互联网

~做一个优秀的码农~
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

javascript实现ArrayList

Posted on 2008-04-16 15:08  KIEKI  阅读(7047)  评论(0编辑  收藏  举报
  1
  2
  3/**********************************************************
  4* JavaScript实现的ArrayList类 
  5
  6* @author {yangl}
  7* @version $Revision: 0.5 $ $Date: 2008/04/02 15:00:00 $
  8* @description
  9* Method:
 10* add(element);
 11* addElementAt(index, element);
 12* contains(element);
 13* get(index);
 14* isEmpty(index);
 15* indexOf(element);
 16* lastIndexOf(element);
 17* remove()
 18* setElementAt(index, element);
 19* size();
 20* toString();
 21* @example
 22* var arrList = new ArrayList();
 23* //var arrList = new ArrayList(10);
 24* arrList.add("000");
 25* arrList.add("001");
 26* arrList.add("002");
 27*
 28*********************************************************/

 29// JavaScript ArrayList
 30/**
 31Method:
 32        add(element);
 33        addElementAt(index, element);
 34        contains(element);
 35        get(index);
 36        isEmpty(index);
 37        indexOf(element);
 38        lastIndexOf(element);
 39        remove(index);
 40        setElementAt(index, element);
 41        size();
 42        toString();
 43*/

 44/**
 45Example:
 46        var arrList = new ArrayList();
 47        //var arrList = new ArrayList(10);
 48        arrList.add("000");
 49        arrList.add("001");
 50        arrList.add("002");
 51*/

 52var ArrayList = function () {
 53    var args = ArrayList.arguments;
 54    var initialCapacity = 10;
 55    
 56    if (args != null && args.length > 0{
 57        initialCapacity = args[0];
 58    }

 59    
 60    var elementData = new Array(initialCapacity);
 61    var elementCount = 0;
 62    
 63    this.size = function () {
 64        return elementCount;
 65    }
;
 66    
 67    this.add = function (element) {
 68        //alert("add");
 69        ensureCapacity(elementCount + 1);
 70        elementData[elementCount++= element;
 71        return true;
 72    }
;
 73    
 74    this.addElementAt = function (index, element) {
 75        //alert("addElementAt");
 76        if (index > elementCount || index < 0{
 77            alert("IndexOutOfBoundsException, Index: " + index + ", Size: " + elementCount);
 78            return;
 79            //throw (new Error(-1,"IndexOutOfBoundsException, Index: "+index+", Size: " + elementCount));
 80        }

 81        ensureCapacity(elementCount + 1);
 82        for (var i = elementCount + 1; i > index; i--{
 83            elementData[i] = elementData[i - 1];
 84        }

 85        elementData[index] = element;
 86        elementCount++;
 87    }
;
 88    
 89    this.setElementAt = function (index, element) {
 90        //alert("setElementAt");
 91        if (index > elementCount || index < 0{
 92            alert("IndexOutOfBoundsException, Index: " + index + ", Size: " + elementCount);
 93            return;
 94            //throw (new Error(-1,"IndexOutOfBoundsException, Index: "+index+", Size: " + elementCount));
 95        }

 96        elementData[index] = element;
 97    }
;
 98    
 99    this.toString = function () {
100        //alert("toString()");
101        var str = "{";
102        for (var i = 0; i < elementCount; i++{
103            if (i > 0{
104                str += ",";
105            }

106            str += elementData[i];
107        }

108        str += "}";
109        return str;
110    }
;
111    
112    this.get = function (index) {
113        //alert("elementAt");
114        if (index >= elementCount) {
115            alert("ArrayIndexOutOfBoundsException, " + index + " >= " + elementCount);
116            return;
117            //throw ( new Error( -1,"ArrayIndexOutOfBoundsException, " + index + " >= " + elementCount ) );
118        }

119        return elementData[index];
120    }
;
121    
122    this.remove = function (index) {
123        if (index >= elementCount) {
124            alert("ArrayIndexOutOfBoundsException, " + index + " >= " + elementCount);
125            //return;
126            throw (new Error(-1"ArrayIndexOutOfBoundsException, " + index + " >= " + elementCount));
127        }

128        var oldData = elementData[index];
129        for (var i = index; i < elementCount - 1; i++{
130            elementData[i] = elementData[i + 1];
131        }

132        elementData[elementCount - 1= null;
133        elementCount--;
134        return oldData;
135    }
;
136    
137    this.isEmpty = function () {
138        return elementCount == 0;
139    }
;
140    
141    this.indexOf = function (elem) {
142        //alert("indexOf");
143        for (var i = 0; i < elementCount; i++{
144            if (elementData[i] == elem) {
145                return i;
146            }

147        }

148        return -1;
149    }
;
150    
151    this.lastIndexOf = function (elem) {
152        for (var i = elementCount - 1; i >= 0; i--{
153            if (elementData[i] == elem) {
154                return i;
155            }

156        }

157        return -1;
158    }
;
159    
160    this.contains = function (elem) {
161        return this.indexOf(elem) >= 0;
162    }
;
163    
164    function ensureCapacity(minCapacity) {
165        var oldCapacity = elementData.length;
166        if (minCapacity > oldCapacity) {
167            var oldData = elementData;
168            var newCapacity = parseInt((oldCapacity * 3/ 2 + 1);
169            if (newCapacity < minCapacity) {
170                newCapacity = minCapacity;
171            }

172            elementData = new Array(newCapacity);
173            for (var i = 0; i < oldCapacity; i++{
174                elementData[i] = oldData[i];
175            }

176        }

177    }

178}
;
179