A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 侯丛政 中级黑马   /  2013-2-6 18:09  /  1769 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 侯丛政 于 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]


评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

4 个回复

倒序浏览
这个我认为是 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的源代码才能搞明白,  但这些方法我认为多试试 掌握其规律和用法就可以了基础学习阶段  ,有兴趣可以再去看看源代码是怎么整的。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
  boolean b = list.addAll(3, c);      // 下面结果为true, 也就是往3角标添加成功..         为什么下标值最大可以等于size? size等于3那下标不是0 1 2吗?
你说的是不是集合的最大角标是2,为什么可以从角标为3的位置可以插入数据?这个比较容易解释,因为集合是可以自动增长长度的,如果new一个新的集合会默认分配为多大的一个数组(size),当元素超过数组的个数是数组长度会自动增长的。这就相当于可变数组。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
楼上说得很对,集合的长度是可变的。
查阅api可以看到ArrayList的构造函数的解释,ArrayList()  构造一个初始容量为 10 的空列表。
也就是说new ArrayList()那么系统就默认创建了一个length为10的数组
如果length超过10那么它的length会每次增加5

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
对  楼上说的有理 毕老师说过的,一时没想起来
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马