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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 追逐 高级黑马   /  2014-3-21 20:11  /  1710 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 追逐 于 2014-3-21 20:42 编辑

import java.util.ArrayList;
import java.util.Iterator;

/*
取出ArrayList集合中的重复元素
*/
  1. class ArrayListTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 ArrayList al = new ArrayList();
  6.                 al.add("java01");
  7.                 al.add("java01");
  8.                 al.add("java02");
  9.                 al.add("java02");
  10.                 al.add("java03");
  11.                 System.out.println(al);
  12.                 al = quChu(al);
  13.                 System.out.println(al);
  14.         }

  15.         public static ArrayList quChu(ArrayList al) //此函数为何无法去除重复函数,求解????????
  16.         {
  17.                 //创建一个容器
  18.                 ArrayList a = new ArrayList();
  19.                 //定义一个迭代器
  20.                 Iterator it = a.iterator();
  21.                 for( ; it.hasNext(); ) //只要容器不为空,就继续执行。知道结果为false。就停止循环
  22.                 {
  23.                         Object obj = it.next();
  24.                         if(!a.contains(obj)) //此容器中不包含此元素。就往下执行
  25.                         {
  26.                                 a.add(obj);
  27.                         }
  28.                 }
  29.                 return a;
  30.         }

  31. }
复制代码
此为运行结果:


评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

7 个回复

倒序浏览
因为你在方法内new了一个ArrayList a,new出来的是空的 Iterator it = a.iterator();也是空的  改成 Iterator it = al.iterator();
回复 使用道具 举报
  1. //定义一个迭代器
  2.                 Iterator it = al.iterator();
复制代码

应该是这个地方出问题了,不小心啊
回复 使用道具 举报
改成


import java.util.ArrayList;
import java.util.Iterator;

/*
取出ArrayList集合中的重复元素
*/
class ArrayListTest
{
        public static void main(String[] args)
        {
                ArrayList al = new ArrayList();
                al.add("java01");
                al.add("java01");
                al.add("java02");
                al.add("java02");
                al.add("java03");
                System.out.println(al);
                al = quChu(al);
                System.out.println(al);
        }

        public static ArrayList quChu(ArrayList al) //此函数为何无法去除重复函数,求解????????
        {
                //创建一个容器
                //ArrayList a = new ArrayList();
                //定义一个迭代器
                Iterator it = al.iterator();
                for( ; it.hasNext(); ) //只要容器不为空,就继续执行。知道结果为false。就停止循环
                {
                        Object obj = it.next();
                        if(!a.contains(obj)) //此容器中不包含此元素。就往下执行
                        {
                                a.add(obj);
                        }
                }
                return a;
        }

}

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
import java.util.*;  
  
class ArrayListTest   
{  
    public static void sop(Object obj)  
    {  
        System.out.println(obj);  
    }  
  
    public static void main(String[] args)   
    {  
        ArrayList al = new ArrayList();  
  
        al.add("java01");  
        al.add("java02");  
        al.add("java01");  
        al.add("java02");  
        al.add("java01");  
        al.add("java03");  
  
        sop(al);  
  
        al = singleElement(al);  
  
        sop(al);  
    }  
  
    public static ArrayList singleElement(ArrayList al)  
    {  
        ArrayList newAl = new ArrayList();  
  
        for(Iterator it = al.iterator(); it.hasNext();)  
        {  
            Object obj = it.next();  
            if(!newAl.contains(obj))  
            {  
                newAl.add(obj);  
            }  
        }  
        return newAl;  
    }  
}  

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
好的。问题解决了。谢谢各路大神
回复 使用道具 举报
楼主你好,你这段代码有两个问题,第一,如果你定义了一个迭代器,最好不要再往里面再执行add()操作,可能会出错,第二,你的迭代器错误的指向了一个空arraylist,你本应该指向al的,一下是我建议的代码:
  1. public static ArrayList quChu(ArrayList al) //此函数为何无法去除重复函数,求解????????

  2.         {

  3.                 //创建一个容器

  4.               ArrayList a =new ArrayList();

  5.                 //定义一个迭代器

  6.                 Iterator it = al.iterator();

  7.                 for( ; it.hasNext(); ) //只要容器不为空,就继续执行。知道结果为false。就停止循环

  8.                 {

  9.                         Object obj = it.next();

  10.                         if(!a.contains(obj)) //此容器中不包含此元素。就往下执行

  11.                         {

  12.                                 a.add(obj);

  13.                         }

  14.                 }

  15.                 return a;

  16.         }



  17. }

复制代码

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

回复 使用道具 举报
   //创建一个容器
                ArrayList a = new ArrayList();
                //定义一个迭代器
                Iterator it = a.iterator();//#这里应该是传进来的内个容器而不是新建立的这个!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马