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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Miss小强 于 2013-4-19 17:23 编辑

List<Integer> list = new ArrayList<Integer>();
                list.add(33);
                list.add(323);
                list.add(313);
                list.add(567);
                list.add(567);
                list.add(567);
                list.add(567);
                for (int i : list) {
                        System.out.println(i);
                }
                ListIterator<Integer> listIterator = list.listIterator();
                while (listIterator.hasNext()) {
                        
                }
                for (int i : list) {
                        System.out.println(i);
                        //注意这里是遍历不出来的,原因我个人认为是由于访问到了最后一个角标;
                        //因为我们知道增强for循环底层是用的数组结构,由于上面listIterator.hasNext();已经遍历到结尾了
                        //所以后面的才遍历不到;
                }

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

9 个回复

倒序浏览
关于集合与数组间的转换,数组转集合后有局限,不能使用集合的增加删除方法;
//这是为什么呢?我知道会发生一个不支持这种操作的异常,可理由何在。。。
笔记不整理不知道,一整理就出现这么多疑问。。。。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
集合中存放的都是对象 你存入在-128---127之外的数是不行的
回复 使用道具 举报
刘印12 发表于 2013-4-19 10:52
集合中存放的都是对象 你存入在-128---127之外的数是不行的

1.5以后不是可以自动装箱拆箱么/
回复 使用道具 举报
刘印12 发表于 2013-4-19 10:52
集合中存放的都是对象 你存入在-128---127之外的数是不行的

额,不是吧。
回复 使用道具 举报
自动拆装箱是对-128===127之间的int数据进行自动拆装箱

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
如果,你在while循环里打印了数据,后面的for循环是可以遍历集合的

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
全超 中级黑马 2013-4-19 15:08:36
8#
List<Integer> list = new ArrayList<Integer>();
                list.add(33);
                list.add(323);
                list.add(313);
                list.add(567);
                list.add(567);
                list.add(567);
                list.add(567);
                for (int i : list) {
                        System.out.println(i);
                }
                ListIterator<Integer> listIterator = list.listIterator();
                while (listIterator.hasNext()) {
                        
                }   //是不是这里大括号多余了。。循环体空的。。。

                for (int i : list) {
                        System.out.println(i);
                        //注意这里是遍历不出来的,原因我个人认为是由于访问到了最后一个角标;
                        //因为我们知道增强for循环底层是用的数组结构,由于上面listIterator.hasNext();已经遍历到结尾了
                        //所以后面的才遍历不到;
                }
回复 使用道具 举报
首先得明白Iterator在进行while循环时,他内部的运行方式,在while循环中我们需要指定listIterator.hasNext()的角标,初始时为0,只有当我们调用了next()方法,内部才会把next当前位置的下一个角标返回给listIterator.hasNext(),也就是说这时hasNext()的值为1,这样才能满足他的完成循环条件,并且该集合实际长度大于当前 角标+1,那么循环不会结束,这就是一个i死循环,这里的循环与简单的底层数组判断结果不一样。
所以,最后的for循环肯定打印不出来了,当前main中存只有一个线程存在。
  1.         ListIterator<Integer> listIterator = list.listIterator();
  2.         while (listIterator.hasNext()) {
  3.                 System.out.println(1);

  4.         }
复制代码
加上这么一句话你就会发现问题。再去看iterator的源码你就清楚了
回复 使用道具 举报
yufeng47 发表于 2013-4-19 15:23
首先得明白Iterator在进行while循环时,他内部的运行方式,在while循环中我们需要指定listIterator.hasNext ...

醍醐灌顶啊,终于豁然开朗了,这么简单的问题都没发现,真是惭愧啊。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马