黑马程序员技术交流社区

标题: 去除ArrayList中重复元素时出现错误 [打印本页]

作者: Odyssey    时间: 2016-3-11 17:18
标题: 去除ArrayList中重复元素时出现错误
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()出来的元素不能再自动装箱还是其他什么问题,求教各位,十分感谢.

作者: 就是我    时间: 2016-3-11 17:18
你调用了多少次 li.next(),必须声明变量来承载,一个循环只能调用一次
作者: Odyssey    时间: 2016-3-11 17:28
我好像懂了,是不是因为
if (!temp.contains(li.next())) {
        temp.add(li.next());
}
这里会调用2次.next(),而且2个.next()内容不一致.
作者: Odyssey    时间: 2016-3-11 17:43

问题解决了,我自己想通了,刚刚脑子出问题了.
作者: wxf468907066    时间: 2016-3-11 21:54
用迭代器的迭代的过程中,不能对集合进行增删操作
作者: diaokb    时间: 2016-3-12 23:30
请查看API 手册

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

QQ图片20160312232903.png

作者: Ayz    时间: 2016-3-12 23:32
你调用了多少次 li.next(),必须声明变量来承载,一个循环只能调用一次
作者: tianqun1992    时间: 2016-3-14 09:54
Odyssey 发表于 2016-3-11 17:28
我好像懂了,是不是因为
if (!temp.contains(li.next())) {
        temp.add(li.next());

同意楼主的说法。
作者: chenhai    时间: 2016-3-14 18:15
呀,说了多少次了li.next()返回的是个匿名对象,对于匿名对象的使用场景,说了很清楚了,仅使用一次,且不关心是否有名,比如某某对象初始化用到其他对象作为构造函数的参数,这时我们就可以用匿名对象了,,,,,,
基础要学的扎实啊.....
一切BUG都缘由基础的薄弱和模棱两可....




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