黑马程序员技术交流社区

标题: ArrayList去重复的问题 [打印本页]

作者: falonsokaka914    时间: 2014-10-22 19:28
标题: ArrayList去重复的问题
        public static void main(String[] args) {
                       
                        /*
                         * 定义一个功能,去除ArrayList中的重复元素
                         *
                         * 思路:
                         * 1.定义一个容器,用于存储唯一性的元素
                         * 2.迭代已有的元素,将每一个迭代到的元素都到新容器中去判断是否包含
                         * 如果包含不存,不包含就存
                         * 3.迭代结束,新容器中存储的都是不重复的元素
                         */
                        ArrayList  list = new ArrayList();
                        list.add("abc1");
                        list.add("abc2");
                        list.add("abc1");
                        list.add("abc2");
                        list.add("abc1");

                        System.out.println(list);
                       
                        list = tokyoList(list);
                        System.out.println(list);
        }

        public  static ArrayList tokyoList(ArrayList list) {
                       
                        //创建一个新容器
                        ArrayList  temp = new ArrayList();
                        //迭代原容器
                        for(Iterator it = list.iterator(); it.hasNext();){
                                //判断temp中是否有重复的元素
                               
                                        if(! temp.contains(it.next())){
                                                //没有重复的就存
                                                temp.add(it.next());
                                        }
                        }
                        //返回没有重复元素的新容器
                return temp;
        }
作者: falonsokaka914    时间: 2014-10-22 19:30
各位大神帮帮我, 我这个哪里错了,求指点:)
作者: Huberry    时间: 2014-10-22 19:39
一次循环 it.next() 执行了两次,比较的和往新容器中添加的不是一个元素

你要定义一个变量来存储迭代的元素,在利用这个引用来操作
String str = it.next();
if(!temp.contains(str)){
    temp.add(str);
}
作者: falonsokaka914    时间: 2014-10-22 19:42
Huberry 发表于 2014-10-22 19:39
一次循环 it.next() 执行了两次,比较的和往新容器中添加的不是一个元素

你要定义一个变量来存储迭代的元 ...

恩, 谢谢你的指点, 我在按照你的方法去试试
作者: 会飞的蜗牛    时间: 2014-10-22 21:02
楼上的楼上说的对
作者: chen578157939    时间: 2014-10-22 21:11
来学习学习
作者: quick3g    时间: 2014-12-3 01:05
Huberry正解呀。楼主想法很好,有效的避免了ArrayList自动改变size()带来的低效问题。
作者: jcde2014    时间: 2014-12-3 10:08
  1.   if(! temp.contains(it.next())){
  2.                                                  //没有重复的就存
  3.                                                 temp.add(it.next());
  4.                                          }
复制代码

你contains的next元素和你add的next元素不是一个哦。




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