黑马程序员技术交流社区
标题: 求解一道题 [打印本页]
作者: 棉/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 |