当我删除arraylist中的一些中间元素时会发生什么?它会自动重新排列整个数组列表吗?例如,考虑以下情况
list.add(one); /** has index 0 ***/
list.add(two); /** has index 1 ***/
list.add(three); /** has index 2 ***/
如果我删除了索引为1的第二个元素,那么具有“三个”的对象的索引是什么。当数组列表的大小很大时,arraylist会自动重新排列整个列表及其索引吗?
答案 0 :(得分:1)
来自JLS
Removes the element at the specified position in this list.
Shifts any subsequent elements to the left (subtracts one from their indices).
答案 1 :(得分:0)
来自ArrayList的来源
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; // Let gc do its work
return oldValue;
}
可以看出它创建了一个副本。因此,索引将被更新
答案 2 :(得分:0)
如果使用索引操作修改arraylist,则会按照您的理解重新排列ArrayList。这就是为什么如果修改太多,ArrayLists的代价很高
这就是删除(int)文档所说的
Removes the element at the specified position in this list. Shifts any subsequent elements to the left (subtracts one from their indices).