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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蓝枫 中级黑马   /  2014-4-6 23:10  /  1034 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. 往hashSet集合中存入自定义对象
  2. 姓名和年龄相同为同一个人重复元素

  3. import java.util.*;
  4. class HashSetTest
  5. {
  6.         public static void sop(Object obj)
  7.         {
  8.                 System.out.println(obj);
  9.         }
  10.    public static void main(String [] args)
  11.         {
  12.         HashSet hs =new HashSet();
  13.         hs.add(new Person("a1",11));
  14.         //hs.add(new Person("a2",12));
  15.     hs.add(new Person("a2",12));
  16.         hs.add(new Person("a3",13));
  17. //        hs.add(new Person("a4",14));
  18.        
  19.         Iterator it = hs.iterator();
  20.         while(it.hasNext())
  21.                 {
  22.                 Person p = (Person)it.next();?
  23.                 sop(p.getName()+"..."+p.getAge());
  24.                 }
  25.     }
  26. }
  27. class Person
  28. {
  29.         private String name;
  30.         private int age;
  31.         Person(String name, int age)
  32.         {
  33.                 this.name= name;
  34.                 this.age= age;
  35.         }
  36.         public int hashCode()
  37.         {
  38. //System.out.println(this.name+"...hashCode");
  39.         return name.hashCode()+age*27; ??
  40.         }
  41.      public boolean equals(Object obj)
  42.         {
  43.                 if(!(obj instanceof Person))  ????
  44.                         return false;
  45.                 Person p =(Person)obj; ??
  46.                 //System.out.println(this.name+"...equals..."+p.name);
  47.                 return this.name.equals(p.name)&& this.age==p.age;  ????
  48.         }

  49.         public String getName()
  50.         {
  51.                 return name;
  52.         }
  53.         public int getAge()
  54.         {
  55.                 return age;
  56.     }   
  57. }
复制代码

好多不懂得地方!求解释!

2 个回复

倒序浏览
第一个问题、
while(it.hasNext()){
    Person p = (Person)it.next();?
    sop(p.getName()+"..."+p.getAge());
}
其中Person p = (Person)it.next();
你在14行hs.add(new Person("a1",11));
因为创建的时候hs.add(Object obj);
Object obj = new Person("张三", 18);将new Person("张三", 18)对象向上转型而Object类中没有getName()方法。故向下转型

第二个问题、
return name.hashCode()+age*27; ??
这个就是返回一个int类型的哈希值,27,这个想乘以多少都可以的,只是为了计算哈希值时避免装车,那样还要去比较equals方法,降低效率。

第三个问题、
if(!(obj instanceof Person))  ????
        return false;
如果向集合中添加的元素不是Person类型的那就没必要比较了,肯定不相等,其实这个时候可以跑出RuntimeException的。

第四个问题、
return this.name.equals(p.name)&& this.age==p.age;  ????
这个就是返回的比较名字和年龄的值哦,这是一个Boolean类型的。就是姓名和年龄相同返回TRUE,为一个人。

没陪女朋友给你回答问题,希望对你有所帮助吧!

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
xuehuayous 发表于 2014-4-6 23:38
第一个问题、
while(it.hasNext()){
    Person p = (Person)it.next();?

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