关于ArrayList的有参数构造的疑问

测试代码如下:

List<String> l = new ArrayList<String>(2);
l.add("444");
l.add("aaa");
l.add("xxxx");
for (String s : l) {
System.out.println(s);
}

输出结果:
444
aaa
xxxx


[color=red]疑问:为什么会打出"xxxx"呢?[/color]来看下源码

/**
* Constructs an empty list with the specified initial capacity.
*
* @param initialCapacity the initial capacity of the list.
* @exception IllegalArgumentException if the specified initial capacity
* is negative
*/
public ArrayList(int initialCapacity) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
//这里已经初始化了容器量
this.elementData = (E[])new Object[initialCapacity];
}


再看add方法:

/**
* Appends the specified element to the end of this list.
*
* @param o element to be appended to this list.
* @return <tt>true</tt> (as per the general contract of Collection.add).
*/
public boolean add(E o) {
ensureCapacity(size + 1); // Increments modCount!!
//上面测试时参数设为2,这里如果再加应该会越界啊,但是最后缺还add进去了,疑问!!!
elementData[size++] = o;
return true;
}



下面是测试数组的:

String[] strArr = new String[2];
strArr[0] = "11";
strArr[1] = "22";
strArr[2] = "33";
for (String ss : strArr) {
System.out.println(ss);
}


会报异常


补:在这个问题上我起初理解的有些偏差,一直认为list是一个像现实的一个容器,不妨假设为一个罐子,当它的模板定下来后,那么它的容量是一定的。其实这种理解是有很大的问题,在java中像list、map等这些容器都是可自动扩充的。而对于数组而言才可以认为是罐子,没有自动扩充的功能。问题尽管有些低级,但是也是个人的一个理解过程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值