测试代码如下:
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
疑问:为什么会打出"xxxx"呢?来看下源码
/**
* 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等这些容器都是可自动扩充的。而对于数组而言才可以认为是罐子,没有自动扩充的功能。问题尽管有些低级,但是也是个人的一个理解过程。
分享到:
相关推荐
关于arraylist和linkedList的区别
集合ArrayList测试集合ArrayList测试集合ArrayList测试集合ArrayList测试集合ArrayList测试集合ArrayList测试
关于java的ArrayList的小例子
一个C++(Ubuntu16.04+QT5.9.1)通过JNI,调用JAVA类及方法的示例。通过JNI传递和返回多种类型的参数,boolean ,int,String,ArrayList,ArrayList嵌套ArrayList<ArrayList<String>>等。
自定义实现的ArrayList数据结构,有大量注释以及编写思路,帮助新手用Java语言来实现数据结构
arrayList排序arrayList排序arrayList排序
ArrayList重要的方法和属性(1)构造器 ArrayList提供了三个构造器 Count属性和Capacity属性 4、ArrayList与数组转换 Array的复杂版本 ArrayList常用方法 ArrayList同步机制 ArrayList内存节省方法 ArrayList使用...
在jni中操作arraylist对象,然后添加一个int型数据进去
arraylist .
告诉我们如何来学习将arrayList进行运用,这是关于C#的程序
什么是ArrayList? 如何使用ArrayList? ArrayList重要的方法和属性?
C语言版的ArrayList,具有ArrayList的基本方法增加、插入、删除、自动扩容等。
1.2.1构造方法 1.2.2成员方法 1.2.3示例代码 public class ArrayListDemo02 { public static void main(String[] args) { //创建集合 ArrayList<String> array = new ArrayList(); //添加元素 array.add(...
ASP .NET - ArrayList对象ASP .NET - ArrayList对象ASP .NET - ArrayList对象ASP .NET - ArrayList对象
使用对象ArrayList填充DataGrid,C#源代码ArrayList MyList = new ArrayList();
当我们不知道到底有多少个数据元素的时候,就可以使用ArrayList; 如果我们知道数据集合有多少个元素,就用数组; 二、如何构建ArrayList 1、ArrayList() //这个构造方法构造了一个空的链表。 //如果你...
ArrayList转化为DataTable数据加载转换方便程序的灵活运用!
ArrayList常用的方法如下: Add 添加到 ArrayList 的結尾處 Remove 從 ArrayList 中移除特定對象的第一個匹配項 RemoveAt 移除 ArrayList 的指定索引處的元素 Insert 將元素插入 ArrayList 的指定索引處 ...
C# Array和ArrayList,List区别
ArrayList最新源码,基于Jdk1.8