我想知道这种方法是如何工作的,因为我想自己制作。所以我谈到了这一点:
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()
}
}
}
答案 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
方法。