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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ぺsimon☆ 中级黑马   /  2013-4-24 22:01  /  1076 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ぺsimon☆ 于 2013-4-25 01:04 编辑
  1. /*
  2. 去除ArrayList集中的重复元素
  3. */
  4. import java.util.*;
  5. class ArrayListTest
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.         ArrayList al=new ArrayList();  //定义一个集合al
  10.         al.add("java01");
  11.         al.add("java02");
  12.         al.add("java02");
  13.         al.add("java03");
  14.         al.add("java04");
  15.         al.add("java01");
  16.         System.out.println(al);
  17.         System.out.println(myGet(al));
  18.         }

  19.         public static ArrayList myGet(ArrayList al)
  20.         {
  21.         ArrayList newal=new ArrayList();  //定义一个新集合
  22.         Iterator it=newal.iterator();  //获取迭代器
  23.         while(it.hasNext())  //判断是否有下一个元素
  24.         {
  25.         Object obj=it.next(); //把获取到的元素的地址值赋给obj

  26.         ////判断新集合里没有obj元素,如果没有就把obj添加到新集合
  27.         if(!newal.contains(obj))
  28.         newal.add(obj);
  29.         }
  30.         return newal;  //返回新集合
  31.         }
  32. }
复制代码
问题;
为什么我在dos命令行里的输出结果是空呢?
运行结果

[java01, java02, java02, java03, java04, java01]
[]



评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

6 个回复

倒序浏览
/*
去除ArrayList集中的重复元素
*/
import java.util.*;
class ArrayListTest
{
        public static void main(String[] args)
        {
        ArrayList al=new ArrayList();  //定义一个集合al
        al.add("java01");
        al.add("java02");
        al.add("java02");
        al.add("java03");
        al.add("java04");
        al.add("java01");
                System.out.println(al);
                System.out.println(myGet(al));
        }

        public static ArrayList myGet(ArrayList al) {
                ArrayList newal = new ArrayList(); // 定义一个新集合
        Iterator it=al.iterator();  //获取迭代器                                        标注:这个地方是获取原有集合a1的迭代器,而不是新集合newa1
        while(it.hasNext())  //判断是否有下一个元素
        {
        Object obj=it.next(); //把获取到的元素的地址值赋给obj

        ////判断新集合里没有obj元素,如果没有就把obj添加到新集合
        if(!newal.contains(obj))
                newal.add(obj);
        }
        return newal;  //返回新集合
        }
}
问题在上面   标注   处,迭代器获取错了,应该是原有集合的.

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 403383221 于 2013-4-24 22:28 编辑

应该是获取原集合的迭代器啊
Iterator it=al.iterator();
  1. ArrayList newal=new ArrayList();  //定义一个新集合

  2.       Iterator it=newal.iterator();  //获取迭代器(这里错了,应迭代原集合)

  3.        while(it.hasNext())  //判断是否有下一个元素
复制代码
回复 使用道具 举报
  1. /*
  2. 去除ArrayList集中的重复元素
  3. */
  4. import java.util.*;
  5. class ArrayListTest
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.         ArrayList al=new ArrayList();  //定义一个集合al
  10.         al.add("java01");
  11.         al.add("java02");
  12.         al.add("java02");
  13.         al.add("java03");
  14.         al.add("java04");
  15.         al.add("java01");
  16.         System.out.println(al);
  17.         System.out.println(myGet(al));
  18.         }

  19.         public static ArrayList myGet(ArrayList al)
  20.         {
  21.         ArrayList newal=new ArrayList();  //定义一个新集合
  22.         Iterator it=newal.iterator();  //获取迭代器         !!!!这个地方错了   
  23.         while(it.hasNext())  //判断是否有下一个元素
  24.         {
  25.         Object obj=it.next(); //把获取到的元素的地址值赋给obj

  26.         ////判断新集合里没有obj元素,如果没有就把obj添加到新集合
  27.         if(!newal.contains(obj))
  28.         newal.add(obj);
  29.         }
  30.         return newal;  //返回新集合
  31.         }
  32. }
复制代码
代码中   Iterator it=newal.iterator();  //这句话是错的        获取迭代器应该是获取al的迭代器 因为 newal中还没有内容 如果获取newal的迭代器 则不会执行 while(it.hasNext())循环 后面的语句都没执行 所以没有输出   应该改成获取al的迭代器  Iterator it = al.iterator():
回复 使用道具 举报
大哥,你获取的迭代器是你在方法方法中新定义的集合的,当然是空的啊!
  1. public static ArrayList myGet(ArrayList al)

  2.         {

  3.         ArrayList newal=new ArrayList();  //定义一个新集合
  4.        //这里你是获取上面新定义的集合的迭代器,应该是al.iterator();
  5.         Iterator it=newal.iterator();  //获取迭代器

  6.         while(it.hasNext())  //判断是否有下一个元素

  7.         {

  8.         Object obj=it.next(); //把获取到的元素的地址值赋给obj



  9.         ////判断新集合里没有obj元素,如果没有就把obj添加到新集合

  10.         if(!newal.contains(obj))

  11.         newal.add(obj);

  12.         }

  13.         return newal;  //返回新集合

  14.         }

复制代码
回复 使用道具 举报
/*
去除ArrayList集中的重复元素
*/
import java.util.*;
class ArrayListTest
{
        public static void main(String[] args)
        {
                        ArrayList al=new ArrayList();  //定义一个集合al
                        al.add("java01");
                        al.add("java02");
                        al.add("java02");
                        al.add("java03");
                        al.add("java04");
                        al.add("java01");
                        System.out.println(al);
                        System.out.println(myGet(al));
        }

        public static ArrayList myGet(ArrayList al)
        {
                        ArrayList newal=new ArrayList();  //定义一个新集合

                        Iterator it=al.iterator();  //获取迭代器        是引用对象al,而不是新创建的newal对象,否则怎么将源数据传递过来呢               
                        while(it.hasNext())  //判断是否有下一个元素
                        {
                                Object obj=it.next(); //把获取到的元素的地址值赋给obj
                                ////判断新集合里没有obj元素,如果没有就把obj添加到新集合
                                if(!newal.contains(obj))
                                        newal.add(obj);
                        }
                        return newal;  //返回新集合
        }
}

////由于定义的是一个新集合,因此这里在创建的一个迭代器里,只能将原集合中的对象al引用过来,来获取遍历的元素,否则无法获取原集合
回复 使用道具 举报
明白了谢谢大家,呵呵,真是粗心啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马