`
weilJava
  • 浏览: 70497 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

关于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


疑问:为什么会打出"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等这些容器都是可自动扩充的。而对于数组而言才可以认为是罐子,没有自动扩充的功能。问题尽管有些低级,但是也是个人的一个理解过程。
分享到:
评论

相关推荐

    Java笔试时可能出现问题及其答案

    terClassCreate"); } public static void main(String[] args) { OuterClass oc = new OuterClass(); } } 内部类在Java中主要有三种...如果你对以上内容有任何疑问或需要深入讨论,可以通过提供的联系方式进行交流。

    基于java的学生管理系统StudnetManager

    1、现要求设计管理员Admin类和学生Student类来存储相应信息,分别要提供一个缺省的和带参数的构造函数来获取数据,同时不能打破面向对象的封装特性(提示:将数据写成私有,为字段提供public setter/getter方法) ...

    java面试常见基础(深层次,高级研发)

    ##### 2.6 关于参数名称等 - 参数名称随着JDK版本的变化而变化,例如JDK 8中Perm Gen被Metaspace取代。 #### 3. JVM服务参数调优实战 ##### 3.1 大型网站服务器案例 - 对于大型网站,通常需要更大的堆内存来减少...

    java语言程序设计课件最新版的

    Java语言程序设计是计算机科学领域中的重要课程,尤其对于初学者和希望深入理解编程概念的人来说。这份最新的Java语言程序设计课件提供了全面的学习资源,帮助...如果有任何疑问或需要讨论,欢迎共同参与,共同进步。

    二十三种设计模式【PDF版】

    关于本站“设计模式” Java 提供了丰富的 API,同时又有强大的数据库系统作底层支持,那么我们的编程似乎变成了类似积木的简单"拼凑"和调用, 甚至有人提倡"蓝领程序员",这些都是对现代编程技术的不了解所至. 在...

Global site tag (gtag.js) - Google Analytics