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()方法的实现。
直面挑战,躬身入局