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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Odyssey 中级黑马   /  2016-3-11 17:18  /  3025 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
package com.heima.list;

import java.util.ArrayList;
import java.util.ListIterator;

public class Demo1 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                ArrayList al = new ArrayList();
                al.add("a");
                al.add("a");
                al.add("b");
                al.add("c");
                al.add("c");
                al.add("c");
                al.add("d");
               
                ArrayList temp = new ArrayList();
                ListIterator li = al.listIterator();
                /*while (li.hasNext()) {                        这种方式会报错:NoSuchElementException
                        if (!temp.contains(li.next())) {
                                temp.add(li.next());
                        }
                }*/
                while (li.hasNext()) {
                        Object ob = li.next();                        //使用Object ob接收li.next()就不会报错
                        if (!temp.contains(ob)) {
                                temp.add(ob);
                        }
                }
               
                System.out.println(temp);
        }

}
是因为迭代器.next()出来的元素不能再自动装箱还是其他什么问题,求教各位,十分感谢.

最佳答案

查看完整内容

你调用了多少次 li.next(),必须声明变量来承载,一个循环只能调用一次

8 个回复

正序浏览
呀,说了多少次了li.next()返回的是个匿名对象,对于匿名对象的使用场景,说了很清楚了,仅使用一次,且不关心是否有名,比如某某对象初始化用到其他对象作为构造函数的参数,这时我们就可以用匿名对象了,,,,,,
基础要学的扎实啊.....
一切BUG都缘由基础的薄弱和模棱两可....
回复 使用道具 举报
Odyssey 发表于 2016-3-11 17:28
我好像懂了,是不是因为
if (!temp.contains(li.next())) {
        temp.add(li.next());

同意楼主的说法。
回复 使用道具 举报
你调用了多少次 li.next(),必须声明变量来承载,一个循环只能调用一次
回复 使用道具 举报
请查看API 手册

QQ图片20160312232903.png (82.28 KB, 下载次数: 20)

QQ图片20160312232903.png
回复 使用道具 举报
用迭代器的迭代的过程中,不能对集合进行增删操作
回复 使用道具 举报

问题解决了,我自己想通了,刚刚脑子出问题了.
回复 使用道具 举报
我好像懂了,是不是因为
if (!temp.contains(li.next())) {
        temp.add(li.next());
}
这里会调用2次.next(),而且2个.next()内容不一致.
回复 使用道具 举报
你调用了多少次 li.next(),必须声明变量来承载,一个循环只能调用一次
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马