黑马程序员技术交流社区

标题: 关于毕老师讲解练习题的一个问题。 [打印本页]

作者: 王廷顺    时间: 2013-5-26 21:49
标题: 关于毕老师讲解练习题的一个问题。
如下代码:
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呢,谁能全面讲解一下。

作者: 陈腾跃_2013    时间: 2013-5-26 22:16
看到这段代码了吗?
     if(!newAl.contains(obj))
        newAl.add(obj);

contains是判断newAI中是否已经有此元素,前面加一个感叹号,就是否定。
整个意思是如果不存在整个元素,就“add”进newAI,最后newAI中的元素都不是重复的,返回newAI。
作者: 严露华    时间: 2013-5-26 22:17
本帖最后由 严露华 于 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;//将集合中的元素返回
     }
}

作者: 顾玲玉    时间: 2013-5-26 22:17
1、这个方法的返回值是ArrayList类型,而
//定义一个临时容器。
   ArrayList newAl = new ArrayList();    newAl是一个ArrayList的实例对象。
2、通过Iterator遍历,取出当前值obj,如果这个值不在newAl中(通过这个newAl.contains(obj)判断),就把这个值存到新的newAl对象中,若存在就不添加,把不同的都提取出来存完后,返回这newAl对象,就是我们要的去除ArrayList集合中的重复元素后的list

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

   

作者: w270307032    时间: 2013-5-26 22:28
借用毕老师的风格,你传进来的是只猫,总不希望我经过处理后,变成狗或其它类型返给你吧{:soso_e113:}




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