我想了解Java。
我们假设我有一个大小为50的ArrayList
并预先填充了一些名字。
假设我从数组列表中删除了第3个和第4个元素。我的数组列表会发生什么?会重新排列吗?如果我尝试访问现在删除的第3和第4个元素,它会返回null吗?
答案 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