技术开发 频道

javascript实现ArrayList


【IT168技术文档】

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
0
相关文章