黑马程序员技术交流社区

标题: List的size问题(谢谢大家的解答) [打印本页]

作者: 侯丛政    时间: 2013-2-6 18:09
标题: List的size问题(谢谢大家的解答)
本帖最后由 侯丛政 于 2013-2-7 00:29 编辑

                List list = new ArrayList();
                list.add("nakeno");
                list.add("na");
                list.add("nake");
                Collection c = new ArrayList();
                c.add("no");
                c.add("n");
                c.add("e");
                System.out.println(list.size());    // 3
                boolean b = list.addAll(3, c);      // 下面结果为true, 也就是往3角标添加成功..         为什么下标值最大可以等于size? size等于3那下标不是0 1 2吗?
                System.out.println(b);               // true
                System.out.println(list);             // [nakeno, na, nake, no, n, e]



作者: 刘凯    时间: 2013-2-6 19:04
这个我认为是 addAll方法的问题, list.addAll(3, c);      表达的是,在将要生成的3角标的位置插入c集合里边的元素,
楼主可以这么试一下 boolean b = list.addAll(2, c); 则输出的会是[nakeno, na, no, n, e, nake]  “nake”这个对象被c里边的元素挤到后边去了, 也就是说c中的元素从指定的位置开始插入,在本如果指定坐标位置有元素,则排到插入元素之后, list.addAll(3, c); 也就等价于尾部插入c中的元素。  
我感觉有些东西得看java的源代码才能搞明白,  但这些方法我认为多试试 掌握其规律和用法就可以了基础学习阶段  ,有兴趣可以再去看看源代码是怎么整的。
作者: 刘军亭    时间: 2013-2-6 19:24
  boolean b = list.addAll(3, c);      // 下面结果为true, 也就是往3角标添加成功..         为什么下标值最大可以等于size? size等于3那下标不是0 1 2吗?
你说的是不是集合的最大角标是2,为什么可以从角标为3的位置可以插入数据?这个比较容易解释,因为集合是可以自动增长长度的,如果new一个新的集合会默认分配为多大的一个数组(size),当元素超过数组的个数是数组长度会自动增长的。这就相当于可变数组。
作者: 谢波    时间: 2013-2-6 20:16
楼上说得很对,集合的长度是可变的。
查阅api可以看到ArrayList的构造函数的解释,ArrayList()  构造一个初始容量为 10 的空列表。
也就是说new ArrayList()那么系统就默认创建了一个length为10的数组
如果length超过10那么它的length会每次增加5
作者: 刘凯    时间: 2013-2-6 22:07
对  楼上说的有理 毕老师说过的,一时没想起来




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2