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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王德升 中级黑马   /  2012-6-8 18:01  /  1439 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王德升 于 2012-6-20 09:08 编辑

class Person
{
        private String name;
        private int age;
        Person(String name,int age)
        {
                this.name = name;
                this.age = age;
        }
        
        public boolean equals(Object obj)// 3.
        {

                if(!(obj instanceof Person))//  1.
                        return false;

                Person p = (Person)obj;

                return this.name.equals(p.name) && this.age == p.age;// 2.
        }

        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
}

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;
        }

class ArrayListTest
{
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
        public static void main(String[] args)
        {
                ArrayList al = new ArrayList();

                al.add(new Person("lisi01",30));
                al.add(new Person("wangwu02",32));
                al.add(new Person("lisi04",35));
                al.add(new Person("wangwu02",32));

                sop("remove 03 :"+al.remove(new Person("lisi03",33)));

                Iterator it = al.iterator();

                while(it.hasNext())
                {
                        Person p = (Person)it.next();

                                sop(p.getName()+".........."+p.getAge());

                }
        }
}


1.老师说这里可以抛出异常请问代码是怎么写的?

2.这里第一个equals是字符串name的.

3.这个是Person的equals方法,

那么2和3这2个equals怎么区别呢,尤其是第2个equals.

4 个回复

倒序浏览
你的person类中用个equals方法干什么,arraylist是允许元素重复的,用不着元素类用到equals方法首先你的程序就有问题
hashset会用到equals方法和hashcode方法判断元素是否重复,如果你把类中的集合改成hashset,那也缺个hashcode方法,person的equals方法是让hashset用来
判断元素是否重复的方法,而name的equals是用来判断字符串是否相同的方法
回复 使用道具 举报
这儿的异常应该是arraylist添加元素的异常吧,你看完泛型就明白了
每个对象都有自己的equals方法,主要看前面是谁的引用!如果是person.equals就是person的;name 是字符串,就是字符串的;
回复 使用道具 举报
1、这里的可以抛出的异常也就只有集合添加元素类型问题而已,也不算是异常,是警告,学到泛型会知道了。
2、2和3的equals方法,一个是调用,一个是定义,谁调用就是谁的,这里是name调用,name是一个字符串,那这个equals方法当然就是字符串里的;在谁里面定义就是谁的,你是在Person类里面定义的,当然就是Person类的
回复 使用道具 举报
1.自定义一个异常让Person类继承,然后在判断的那块抛出这个异常。
2.那个equals的解释在代码注释部分。

  1. class Person
  2. {
  3.         private String name;
  4.         private int age;
  5.         Person(String name,int age)
  6.         {
  7.                 this.name = name;
  8.                 this.age = age;
  9.         }
  10.         
  11.         public boolean equals(Object obj)// 这里的equals方法是给Person类定义的,所以和字符串的equals没有关系。
  12.         {

  13.                 if(!(obj instanceof Person))//  1.
  14.                         return false;

  15.                 Person p = (Person)obj;

  16.                 return this.name.equals(p.name) && this.age == p.age;// this.name返回的是一个字符串,字符串调用的equals方法就是字符串自己的方法。
  17.         }

  18.         public String getName()
  19.         {
  20.                 return name;
  21.         }
  22.         public int getAge()
  23.         {
  24.                 return age;
  25.         }
  26. }

  27. public static ArrayList singleElement(ArrayList al)
  28.         {
  29.                 ArrayList newAl = new ArrayList();

  30.                 Iterator it = al.iterator();

  31.                 while(it.hasNext())
  32.                 {
  33.                         Object obj = it.next();

  34.                         if(!newAl.contains(obj))
  35.                                 newAl.add(obj);

  36.                 }

  37.                 return newAl;
  38.         }

  39. class ArrayListTest
  40. {
  41.         public static void sop(Object obj)
  42.         {
  43.                 System.out.println(obj);
  44.         }
  45.         public static void main(String[] args)
  46.         {
  47.                 ArrayList al = new ArrayList();

  48.                 al.add(new Person("lisi01",30));
  49.                 al.add(new Person("wangwu02",32));
  50.                 al.add(new Person("lisi04",35));
  51.                 al.add(new Person("wangwu02",32));

  52.                 sop("remove 03 :"+al.remove(new Person("lisi03",33)));

  53.                 Iterator it = al.iterator();

  54.                 while(it.hasNext())
  55.                 {
  56.                         Person p = (Person)it.next();

  57.                                 sop(p.getName()+".........."+p.getAge());

  58.                 }
  59.         }
  60. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马