Study《JavaScript实现ArrayList》

仿照java用数组实现ArrayList

/*******************************************************************************
 * JavaScript实现的ArrayList.
 *
 * @author Naga{jiangdragon@126.com}
 * @version 2012/06/06
 *      
 ******************************************************************************/
function ArrayList() {
 var args = ArrayList.arguments;
 var initCapacity = 10;
 if (args != null && args.length > 0)
  initCapacity = args[0];
 var elementData = new Array(initCapacity);
 var size = 0;

 this.size = function() {
  return size;
 };
 this.isEmpty = function() {
  return size == 0;
 };
 this.contians = function() {
  return this.indexOf(obj) >= 0;
 };
 this.indexOf = function(obj) {
  if (obj == null) {
   for ( var i = 0; i < size; i++)
    if (elementData[i] == null)
     return i;
  } else {
   for ( var i = 0; i < size; i++)
    if (elementData[i] == obj)
     return i;
  }
  return -1;
 };
 this.lastIndexOf = function(obj) {
  if (obj == null) {
   for ( var i = size - 1; i >= 0; i--)
    if (elementData[i] == null)
     return i;
  } else {
   for ( var i = size - 1; i >= 0; i--)
    if (elementData[i] == obj)
     return i;
  }
  return -1;
 };
 this.get = function(index) {
  rangeCheck(index);
  return this.elementData[index];
 };
 this.setElementAt = function(index, obj) {
  rangeCheck(index);
  var oldValue = elementData[index];
  this.elementData[index] = obj;
  return oldValue;
 };
 this.add = function(obj) {
  ensureCapacity(size + 1);
  elementData[size++] = obj;
  return true;
 };

 this.addElementAt = function(index, obj) {
  if (index > size || index < 0) {
   alert("ArrayIndexOutOfBoundsException," + index + ">=" + size);
   return;
  }
  ensureCapacity(size + 1);
  elementData[index] = element;
  size++;
 };
 this.remove = function(index) {
  rangeCheck(index);
  var oldValue = elementData[index];
  for ( var i = index; i < size - 1; i++) {
   elementData[i] = elementData[i + 1];
  }
  elementData[--size] = null;
  return oldValue;
 };
 this.clear = function() {
  for ( var i = 0; i < size; i++)
   elementData[i] = null;
  size = 0;
 };
 this.toString = function() {
  if (size == 0)
   return "{}";
  var str = "{";
  for ( var i = 0; i < size; i++) {
   str += elementData[i];
   if (i == size - 1)
    return str + "}";
   str += ",";
  }
 };
 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];
   }
  }
 };

 function rangeCheck(index) {
  if (index >= size) {
   alert("ArrayIndexOutOfBoundsException," + index + ">=" + size);
   return;
  }
 };

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值