关于ArrayList的有参数构造的疑问
来源:互联网 发布:十字军之王2优化补丁 编辑:程序博客网 时间:2024/06/03 20:07
关于ArrayList的有参数构造的疑问
Java综合
测试代码如下:
输出结果:
疑问:为什么会打出"xxxx"呢?来看下源码
再看add方法:
下面是测试数组的:
会报异常
补:在这个问题上我起初理解的有些偏差,一直认为list是一个像现实的一个容器,不妨假设为一个罐子,当它的模板定下来后,那么它的容量是一定的。其实这种理解是有很大的问题,在java中像list、map等这些容器都是可自动扩充的。而对于数组而言才可以认为是罐子,没有自动扩充的功能。问题尽管有些低级,但是也是个人的一个理解过程。
- 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等这些容器都是可自动扩充的。而对于数组而言才可以认为是罐子,没有自动扩充的功能。问题尽管有些低级,但是也是个人的一个理解过程。
阅读全文
0 0
- 关于ArrayList的有参数构造的疑问
- 关于拷贝构造函数和赋值操作重载函数访问同类引用参数的私有变量的疑问
- 关于类的构造方法的疑问解答
- 有疑问的题
- 有疑问的题目
- 拷贝构造函数的疑问
- 关于C/C++函数声明中参数个数的疑问
- 关于连接池参数testWhileIdle,testOnBorrow,testOnReturn的疑问
- 关于javascript的疑问
- 关于变压器的疑问
- 关于 LoadLibrary 的疑问
- 关于junit的疑问
- 关于pthread_testcancel()的疑问
- 关于 retainCount 的疑问
- 关于Midi的疑问
- 关于IO的疑问
- 关于const_cast的疑问
- 关于scanf的疑问
- imx6q v4l2 输入部分ok
- android studio出错unable to run mksdcard sdk tool
- 解决 OS X 10.9 打开Finder文件夹内容显示慢问题
- SQL优化
- delphi2010 进程不显示在任务栏的总结
- 关于ArrayList的有参数构造的疑问
- python环境下安装dlib库
- IDEA Unable to open debugger port(idea不能打开调试器)
- CTC理解
- 如何配置vue的环境配置和新建项目
- 经典案例:如何优化Oracle使用DBlink的SQL语句
- 计算数组中每个数字出现多少次--“Bucket”桶的思想
- 天文方面的python库
- storm 课件