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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我的代码如下:
  1. import java.util.*;

  2. class Student
  3. {
  4.         private String name;
  5.         private int age;

  6.         Student(String name,int age)
  7.         {
  8.                 this.name=name;
  9.                 this.age=age;
  10.         }

  11.         public boolean equals(Object obj)//覆写Object中的equals方法
  12.         {
  13.                 if(!(obj instanceof Student))
  14.                         return false;
  15.                
  16.                 Student s=(Student)obj;
  17.                 System.out.println(this.name+"...equals"+s.name);
  18.                
  19.                 return this.name.equals(s.name) && this.age==s.age;//判断name和age是否相同,都相同则为真,表明为同一个人。
  20.         }

  21.         public String getName()
  22.         {
  23.                 return name;
  24.         }

  25.         public int getAge()
  26.         {
  27.                 return age;
  28.         }

  29.        
  30. }

  31. class ListTest_1
  32. {
  33.         public static void main(String[] args)
  34.         {
  35.                 ArrayList al=new ArrayList();

  36.                 al.add(new Student("sunyan1",20));
  37.                 al.add(new Student("sunyan2",21));
  38.                 al.add(new Student("sunyan1",20));
  39.                
  40.                 al=singleArr(al);
  41.                 Iterator it=al.iterator();

  42.                 while(it.hasNext())
  43.                 {
  44.                         Student s=(Student)it.next();
  45.                         System.out.println(s.getName()+":::"+s.getAge());
  46.                 }
  47.         }

  48.         public static ArrayList singleArr(ArrayList al)
  49.         {
  50.                 ArrayList newAl=new ArrayList();

  51.                 Iterator me=newAl.iterator();

  52.                 while(me.hasNext())
  53.                 {
  54.                         Object obj=me.next();
  55.                         if(!(newAl.contains(obj)))
  56.                         {
  57.                                 newAl.add(obj);
  58.                         }
  59.                 }
  60.                 return newAl;
  61.         }
  62.         public static void method(Object obj)
  63.         {
  64.                 System.out.println(obj);
  65.         }
  66. }
复制代码


问题1: 当调用了al=singleArr(al);时,输出结果时没有任何结果。而没有调用时却会输出结果。

问题2:输出结果显示Student类并没有自动调用其覆写的equals方法,因此也没有起到去重的功能。

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 为了明天 于 2014-5-25 19:15 编辑

singleArr的方法写错了,应该迭代的是传进来的al;修改如下
        public static ArrayList singleArr(ArrayList al)
        {
                ArrayList newAl=new ArrayList();

                Iterator me=al.iterator();

                while(me.hasNext())
                {
                        //System.out.println("....");
                        Object obj=me.next();
                        if(!(newAl.contains(obj)))
                        {
                                newAl.add(obj);
                        }
                }
                return newAl;
        }


打印结果为
sunyan2...equalssunyan1
sunyan1...equalssunyan1
sunyan1:::20
sunyan2:::21


之所以没有
sunyan1...equalssunyan2 是因为第一次执行的时候newAl中没有数据,contains不调用equals方法判断是否包含元素。

个人理解,不对见谅

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
楼上说得对,就是这句,你注意一下迭代
ArrayList newAl=new ArrayList();
  Iterator me=newAl.iterator();


改过来
ArrayList newAl=new ArrayList();
Iterator me=al.iterator();

多注意就好了
回复 使用道具 举报
public static ArrayList singleArr(ArrayList al)

59.        {

60.                ArrayList newAl=new ArrayList();
这是一个新集合  里面什么也没有  
回复 使用道具 举报
看懂了,学习了
回复 使用道具 举报
。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马