黑马程序员技术交流社区
标题: 求解一道题 [打印本页]
作者: 棉/mg花/x糖    时间: 2013-6-27 11:30
标题: 求解一道题
 本帖最后由 孙百鑫 于 2013-7-1 07:43 编辑 
题目:自定义一个Person类(有id,姓名,年龄,生日,电话等属性),并创建一些Person实例添加到HashSet集合中,Person对象的id一致则为重复。
作者: 王靖远    时间: 2013-6-27 11:36
保证唯一要复写hashCode和equals。你这个把equals复写就OK了。
作者: 王靖远    时间: 2013-6-27 11:38
public boolean equals(Student stu)
{
if(stu.getId()==this.getId())
    return true;
else 
   return false;
}
作者: 棉/mg花/x糖    时间: 2013-6-27 11:50
求完整源码。我马上上交,谢谢~~来不及思考
作者: 王靖远    时间: 2013-6-27 11:58
- class Person
 - {
 -         private int id;
 -         private int age;
 -         private String name;
 -         private int tel;
 -         Student(int id,int age,String name,int tel)
 -         {
 -                 this.id = id;
 -                 this.age = age;
 -                 this.name = name;
 -                 this.tel = tel;
 -         }
 -         //get set就不写了
 
-         public int hashCode()
 -         {
 -                 return Integer.parseInt(name)+id+age+tel*33;
 -         }
 -         public boolean equals(Student stu)
 -         {
 -                 int num = new Integer(stu.getID()).compareTo(new Integer(this.getID()))
 -                 if(num==0)
 -                         return true;
 -                 else
 -                         return false;
 -         }
 - }
 
 复制代码
作者: 棉/mg花/x糖    时间: 2013-6-27 12:02
呵呵,别呀~~谢了哈,完整的~~
作者: wangpan    时间: 2013-6-27 12:06
- package test;
 
- import java.util.Arrays;
 - import java.util.Date;
 - import java.util.HashSet;
 
- public class Test {
 
- /**
 - * 题目:自定义一个Person类(有id,姓名,年龄,生日,电话等属性),并创建一些Person实例添加到HashSet集合中,Person对象的id一致则为重复。
 - */
 - public static void main(String[] args) {
 - Person p1=new Person("001","zhangsan",11,new Date(System.currentTimeMillis()),"123456789");
 - Person p2=new Person("002","zhangsan",11,new Date(System.currentTimeMillis()),"123456789");
 - Person p3=new Person("001","zhangsan",11,new Date(System.currentTimeMillis()),"123456789");
 - HashSet<Person> hs = new HashSet<Person>();
 - hs.add(p3);
 - hs.add(p2);
 - hs.add(p1);
 - System.out.println(hs.size());//2
 - }
 
- }
 - class Person{
 - private String id;
 - private String name;
 - private int age;
 - private Date birthday;
 - private String phone;
 
- public Person(String id,String name,int age,Date birth,String phone){
 - this.id=id;
 - this.name=name;
 - this.age=age;
 - this.birthday=birth;
 - this.phone=phone;
 - }
 - @Override
 - public int hashCode(){
 - return id.hashCode();
 - }
 
- @Override
 - public boolean equals(Object obj){
 - Person p =(Person)obj;
 - if(this.id.equals(p.id)){
 - return true;
 - }
 - return false;
 
- }
 - }
 
 复制代码
作者: 花心々小土豆    时间: 2013-6-27 13:10
这都可以!!!
作者: 280270738    时间: 2013-6-27 13:24
记住用到hash的就要复写他的hashcode和equals方法。用这两个方法来判断是否是重复元素。建议自己动手写写。如果写不出来再看别人怎么写的。
作者: 郭伟杰    时间: 2013-6-27 13:45
对  就是这样
作者: 郭伟杰    时间: 2013-6-27 13:48
C:\Users\Administrator\Desktop
作者: 棉/mg花/x糖    时间: 2013-6-27 16:00
太感激了~~~
作者: 棉/mg花/x糖    时间: 2013-6-27 16:07
咋弄一个路径呀~~~
作者: 花伟昌    时间: 2013-6-27 17:24
import java.util.HashSet;
import java.util.Iterator;
/**
 * 题目:自定义一个Person类(有id,姓名,年龄,生日,电话等属性),并创建一
 * 些Person实例添加到HashSet集合中,Person对象的id一致则为重复。 
 * @author Administrator
 *
 */
public class Person {
        
        @Override
        public String toString() {
                
                
                return this.getName();
        }
        public String getName() {
                return this.name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }
        
        public String getTelnumber() {
                return telnumber;
        }
        public void setTelnumber(String telnumber) {
                this.telnumber = telnumber;
        }
        public int getId() {
                return this.id;
        }
        public void setId(int id) {
                this.id = id;
        }
        @Override
        public int hashCode() {//覆写hashCode方法
                
                return this.id;
        }
        @Override
        public boolean equals(Object obj) {//覆写equals方法
                Person p=(Person)obj;
                System.out.println(this.toString()+"...equals...."+p.toString());
                return this.getId()-p.getId()==0;
                
        }
        private int id;
        private String name;
        private int age;        
        private String telnumber;
        public Person(int id, String name, int age, String telnumber) {
                super();
                this.id = id;
                this.name = name;
                this.age = age;
              this.telnumber = telnumber;
        }
        public static void main(String []args){
                HashSet<Person> hs=new HashSet<Person>();
                hs.add(new Person(123,"张三",23,"021-43560980"));
                hs.add(new Person(123,"李四",22,"010-43567870"));//李四和张三的ID相同,没有添加进集合。
                hs.add(new Person(112,"王五",21,"022-43534590"));
                hs.add(new Person(156,"小明",20,"021-43561230"));
                
                Iterator<Person> it=hs.iterator();
                while(it.hasNext()){
                        Person p=it.next();
                        System.out.println(p.getId()+"::"+p.getName()+"::"+p.getAge()+"::"+p.getTelnumber());
                }
        }
}
结果:
李四...equals....张三
156::小明::20::021-43561230
112::王五::21::022-43534590
123::张三::23::021-43560980
作者: 郭伟杰    时间: 2013-6-27 19:03
本来发桌面上的一个图片的       居然只有路径发成功了
作者: 刘凯    时间: 2013-6-27 20:25
你这个是入学测试??!! 
作者: 棉/mg花/x糖    时间: 2013-6-27 23:25
嗯,太感激了~~
作者: 刘凯    时间: 2013-6-28 11:15
如果是入学测试题 最好自己做   论坛发问 消息扣分哦 
作者: 棉/mg花/x糖    时间: 2013-6-28 23:03
嗯,这个不是入学测试,是在百度文库挡下来的一套试题~~~谢谢^_^
作者: 棉/mg花/x糖    时间: 2013-6-28 23:04
我还没走到入学测试那一关啊,咔咔~~~
作者: 棉/mg花/x糖    时间: 2013-6-28 23:07
版主,您好,为嘛现在帖子只能发不能编辑啊~~~~之前可以在发完之后还可以写该的哦~~少了一个编辑功能...咔咔
作者: 棉/mg花/x糖    时间: 2013-6-28 23:08
你的技术分涨的好快 啊.....没过多久就快90了
作者: 王靖远    时间: 2013-6-29 09:29
我回复了500多个帖子才81分啊。多劳多得嘛
作者: 张云杰    时间: 2013-6-29 13:04
记住一点, 如果要判断对象重复, 就必须重写equals跟hashcode,, 这是不变的法则
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 
黑马程序员IT技术论坛 X3.2 |