黑马程序员技术交流社区
标题:
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