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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王廷顺 中级黑马   /  2013-5-26 21:49  /  2048 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如下代码:
import java.util.*;
/*
去除ArrayList集合中的重复元素。

*/
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();
   Iterator it = al.iterator();
          while(it.hasNext())
   {
       Object obj = it.next();
       if(!newAl.contains(obj))
        newAl.add(obj);
   }
   return newAl;
     }
}

为什么return后的是newAl呢,谁能全面讲解一下。

5 个回复

倒序浏览
看到这段代码了吗?
     if(!newAl.contains(obj))
        newAl.add(obj);

contains是判断newAI中是否已经有此元素,前面加一个感叹号,就是否定。
整个意思是如果不存在整个元素,就“add”进newAI,最后newAI中的元素都不是重复的,返回newAI。
回复 使用道具 举报
本帖最后由 严露华 于 2013-5-26 22:21 编辑

如下代码:
import java.util.*;
/*
去除ArrayList集合中的重复元素。

*/
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,所以要将集合中的元素返回
     {
          //定义一个临时容器。
   ArrayList newAl = new ArrayList();
   Iterator it = al.iterator();
          while(it.hasNext())
   {
       Object obj = it.next();
       if(!newAl.contains(obj))
        newAl.add(obj);//若元素不相同,则添加进临时ArrayList集合中
   }
   return newAl;//将集合中的元素返回
     }
}
回复 使用道具 举报
1、这个方法的返回值是ArrayList类型,而
//定义一个临时容器。
   ArrayList newAl = new ArrayList();    newAl是一个ArrayList的实例对象。
2、通过Iterator遍历,取出当前值obj,如果这个值不在newAl中(通过这个newAl.contains(obj)判断),就把这个值存到新的newAl对象中,若存在就不添加,把不同的都提取出来存完后,返回这newAl对象,就是我们要的去除ArrayList集合中的重复元素后的list

点评

说的挺对的!!!你定义的静态方法类型是ArrayList ,所以返回的值一定是ArrayList 的对象,而newAl 就是他的对象,所以这个是必然的!!!  发表于 2013-5-26 22:22
回复 使用道具 举报
毕老师调用 singleElement(ArrayList al)方法,达到去除ArrayList集合中的重复元素的目的的原理是:创造一个新的空容器(集合newAl),然后将旧容器(al)中的元素遍历一个个放进来与新容器的元素进行比较,一样则不添加。而不是将旧容器中一样的元素删除。调用者的目的是希望将集合中的重复元素的目的,希望得到的肯定还是一个不含重复元素的集合,调用方法前后不改变其类型。所以毕老师将新建的容器返回来了。
  最后说句,本人也是新手,以上仅代表本人观点,正确与否有待考证,希望能帮到楼主。

   
回复 使用道具 举报
借用毕老师的风格,你传进来的是只猫,总不希望我经过处理后,变成狗或其它类型返给你吧{:soso_e113:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马