arrayList.remove()如何运行

时间:2017-05-21 10:45:58

标签: java arraylist

我想知道这种方法是如何工作的,因为我想自己制作。所以我谈到了这一点:

public static deleteMe(int index){
 for(int i=0;i<arrayList.size;i++){
     if(i==index){
          // how to tell java to delete that member of list on the index i, 
          // but not to be arrayList.remove()
         }
   }
 }

1 个答案:

答案 0 :(得分:1)

ArrayList内部基于一个简单的数组,所以当你通过索引删除时,只需将索引比删除的元素更高的所有内容移动到一个位置,查看te JDK实现:

public E remove(int index) {
  rangeCheck(index);

  modCount++;
  E oldValue = elementData(index);

  int numMoved = size - index - 1;
  if (numMoved > 0)
  System.arraycopy(elementData, index+1, elementData, index,
                             numMoved);
  elementData[--size] = null; // clear to let GC do its work

  return oldValue;
}

当然,内部数组(elementData)是包访问权限,因此您无权访问它,这就是重点。如果您要实现自己的列表,我建议扩展AbstractList。如果你不是,那么这个问题没有意义,就像我说的那样,ArrayList封装内部数组的全部意义,所以你只能通过可用的方法对它进行操作。

如果您不想通过索引删除,而是通过传递ArrayList所持有的某个类型实例,则需要equals检查,以便该类型需要正确覆盖{{1} }和equals方法。