我的ArrayList会发生什么

时间:2012-06-25 11:17:53

标签: java collections

我想了解Java。

我们假设我有一个大小为50的ArrayList并预先填充了一些名字。

假设我从数组列表中删除了第3个和第4个元素。我的数组列表会发生什么?会重新排列吗?如果我尝试访问现在删除的第3和第4个元素,它会返回null吗?

9 个答案:

答案 0 :(得分:18)

不,你要删除的元素之后的元素会向左移动(昂贵的操作),所以你不会有任何漏洞。

如旁注:如果删除第3个元素,则第5个元素将向左移动,因此如果之后删除第4个元素,则取而代之的是删除第5个元素。要删除两个连续元素,您应该提供两次相同的索引。

答案 1 :(得分:7)

他们将被重新安排并转移。

如果您希望它们返回null,只需将要删除的元素显式设置为null,而不是将其删除。

答案 2 :(得分:4)

你为什么不亲自尝试?

List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("F");
list.add("G");

for(int i = 0; i < list.size(); i++) System.out.println("index " + i + ": " + list.get(i));

System.out.println();
list.remove(0); // remove "A"

for(int i = 0; i < list.size(); i++) System.out.println("index " + i + ": " + list.get(i));

<强>输出:

index 0: A
index 1: B
index 2: C
index 3: D
index 4: E
index 5: F
index 6: G

index 0: B
index 1: C
index 2: D
index 3: E
index 4: F
index 5: G

答案 3 :(得分:3)

您实际上有两种选择:

final List<Character> x = new ArrayList<Character>(asList('a', 'b', 'c', 'd'));
x.set(1, null); // removes an element without shifting
x.remove(0);    // removes an element with shifting
System.out.println(x);

打印

[null, c, d]

答案 4 :(得分:2)

将重新排列数组列表元素

答案 5 :(得分:1)

ArrayList是索引可以引用的项目的连续列表。因此,当您删除某个项目时,以下所有项目都将被移动。

答案 6 :(得分:1)

元素将被转移。

请参阅用于ArrayList的javadoc remove:

java.util.ArrayList
public E remove(int index)
Removes the element at the specified position in this list. Shifts any subsequent elements to the left (subtracts one from their indices).
Specified by:
remove in interface List
Overrides:
remove in class AbstractList
Parameters:
index - the index of the element to be removed
Returns:
the element that was removed from the list
Throws:
IndexOutOfBoundsException -

答案 7 :(得分:1)

根据javadoc for the remove method,剩余的条目将向后移动,因此没有间隙。

答案 8 :(得分:0)

通常使用java collections作为动态存储空间,而不定义大小。

List<String> list = new ArrayList<String>(); //dynamic

对于静态预定义集合,您使用java arrays

String[] array = new String[50]; //static