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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 闫宽 中级黑马   /  2013-8-5 10:27  /  1573 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-8-5 18:32 编辑
  1. package Collection;
  2. import java.util.*;

  3. public class ArrayListTest {
  4.         /* 去除ArrayList集合中的重复元素、
  5.          */
  6.         public static void main(String[] args) {

  7.                 ArrayList al = new ArrayList();

  8.                 al.add("java001");
  9.                 al.add("java002");
  10.                 al.add("java001");
  11.                 al.add("java002");
  12.                 al.add("java003");

  13.                 sop(al);

  14.                 al = singleElement(al);

  15.                 sop(al);
  16.         }

  17.         public static void sop(Object obj) {
  18.                 System.out.println(obj);
  19.         }

  20.         public static ArrayList singleElement(ArrayList al) {
  21.                 // 定义一个临时容器
  22.                 ArrayList newAl = new ArrayList();
  23.                
  24.                 [color=Red]Iterator it = al.iterator();//这里为什么是al.iterator   而不是newAl.iterator[/color]                while (it.hasNext()) {
  25.                         Object obj = it.next();
  26.                         if (!newAl.contains(obj))
  27.                                 newAl.add(obj);
  28.                 }
  29.                 return newAl;
  30.         }
  31. }
复制代码
请大家帮帮忙,谢谢啦!

7 个回复

倒序浏览
因为你是要把老集合里的元素存到新集合中,所以要遍历老集合,
回复 使用道具 举报
本帖最后由 wang100753 于 2013-8-5 11:14 编辑

Iterator()方法内部,肯定是有类实现了Iterator接口的,并且在Iterator方法内部就创建了每个集合对应的Iterator对象,然后return出来。“Iterator it = al.iterator();“这个返回值(也就是指向对象的地址)又马上赋值给了变量it。所以变量it就指向了 iterator()方法内部创建的iterator对象。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
因为你是要将al里面的元素拿出来然后放到newAl中,所以首先要遍历al拿出其中所有元素,
这个地方al.iterator()是获取al集合的迭代器,然后通过此迭代器就可以达到遍历集合al的目的,next()方法是依次拿出al中元素。
注意在用next方法前还是要搭配hasNext()方法用的,要不然next方法把集合中元素拿完后会抛异常。
回复 使用道具 举报
楼主说的al.iterator 是遍历的旧集合,遍历旧集合上的每一个元素看新集合上是不是contains所遍历的元素,如果不包含那么就添加进新集合。
回复 使用道具 举报
xkfxm 发表于 2013-8-5 11:10
因为你是要将al里面的元素拿出来然后放到newAl中,所以首先要遍历al拿出其中所有元素,
这个地方al.iterato ...

嗯嗯  明白啦  谢谢哈
回复 使用道具 举报
wang100753 发表于 2013-8-5 11:09
Iterator()方法内部,肯定是有类实现了Iterator接口的,并且在Iterator方法内部就创建了每个集合对应的Iter ...

好吧 亲人,这个有点不好理解,不过大体上还是明白了。。。 谢谢亲人!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马