在java中的任意位置插入。util。列表
根据文档,您可以在列表中的任意位置插入对象:
The user of this interface has precise control over where in the list each element is inserted.
(来源:http://download.oracle.com/javase/6/docs/api/java/util/List.html)
但以下程序因IndexOutOfBoundsException而失败:
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> myList = new ArrayList<String>();
myList.add(0, "derp");
myList.add(2, "herp");
for (String s : myList) {
System.out.println("Le string: " + s);
}
}
}
这也无助于显式地设置初始容量(因为默认值是10,所以这是有意义的)
为什么我不能在任何位置插入对象,只要它的索引低于容量?大小是否始终等于插入的元素数
# 1 楼答案
ArrayList有两个成员:容量和大小
capacity是基础数组的长度,size是ArrayList表示的数组的长度
因此,必须在列表中添加数据,以便ArrayList本身获得要插入数据的大小
# 2 楼答案
列表容量与其大小不同
容量是数组支持的列表(如
ArrayList
或Vector
)的一个属性,它是支持数组的分配大小(即,在需要扩展结构之前可以放置的最大项数)正如您所说,大小是列表中存在的元素数
那么,为什么只要有空间,就不能在任何地方插入元素呢?很简单,因为
List
接口没有指定对象的备份方式,并且您无法在类似LinkedList
的情况下执行该操作;因此,同质(正确)行为是在发生异常时抛出异常所以你有两个选择:
null
是一个合理的默认值,那么可以直接使用数组李># 3 楼答案
首先插入
myList.add(0, "herp")
,然后检查大小。然后,大小为1
,但插入位置为2
# 4 楼答案
列表的大小始终等于插入的元素数
javadoc
# 5 楼答案
可以在任何有效位置插入对象。仔细查看^{} 的Javadoc:
换句话说,插入元素总是会使列表的大小增加1。你可以插入任何一端,或者中间…但是你不能插入超过结尾
一个
ArrayList
的容量实际上是一个实现细节-它控制何时需要用一个更大的阵列替换备份阵列以处理更多的元素。列表的大小是这里的重要部分-容量为100的列表,但大小为5的列表仍然只是5个元素的列表,因此在67位插入这样的列表是没有意义的# 6 楼答案
我的名单。添加(2,“herp”)应为myList。添加(1,“herp”)
随着时间的增加,列表的大小是1,而不是2