Java之hashSet实现引用类型的禁止重复功能

题目:在HashSet集合中添加Person对象,把姓名相同的人当作同一个人,禁止重复添加。

分析:1.定义一个Person类,定义name和age属性,并重写hashCode()和equals()方法,针对Person类的name属性进行比较。

代码:

 1 import java.util.HashSet;
 2 import java.util.Iterator;
 3 import java.util.Set;
 4 
 5 public class Test70602 {
 6 
 7     public static void main(String[] args) {
 8         Person p1 = new Person("haha", 23);
 9         Person p2 = new Person("gege", 24);
10         Person p3 = new Person("gege", 25);
11         Set<Person> set = new HashSet<Person>();
12         set.add(p1);
13         set.add(p2);
14         set.add(p3);
15         System.out.println(set.size());
16         Iterator<Person> iterator = set.iterator();
17         while (iterator.hasNext()) {
18             Person person = (Person) iterator.next();
19             System.out.println(person.getName() + ":" + person.getAge());
20         }
21 
22     }
23 
24 }
25 
26 class Person {
27 
28     private String name;
29     private int age;
30 
31     public Person(String name, int age) {
32         this.name = name;
33         this.age = age;
34     }
35 
36     public void setName(String name) {
37         this.name = name;
38     }
39 
40     public String getName() {
41         return name;
42     }
43 
44     public void setAge(int age) {
45         this.age = age;
46     }
47 
48     public int getAge() {
49         return age;
50     }
51 
52     // 实现hashCode()方法,返回待比较内容的hashCode。
53     public int hashCode() {
54         return name.hashCode();
55     }
56 
57     // 实现equals()方法,返回一个布尔值。
58     public boolean equals(Object obj) {
59         if (this == obj) { // 判断是否是同一个对象,是的话,返回True
60             return true;
61         }
62         if (!(obj instanceof Person)) { // 判断对象是否是Person类型,如果对象不是,返回false
63             return false;
64         }
65 
66         Person p = (Person) obj; // 将对象强转为Person类型
67         boolean b = this.name.equals(p.name); // 判断name是否相同
68         return b; // 返回判断结果
69 
70     }
71 
72 }

最关键的就是hashCode()和equals()方法的实现。

posted @ 2015-08-26 09:58  熠然  阅读(824)  评论(0编辑  收藏  举报