1 package com.lv.study.pm.first;
2
3 import java.util.HashSet;
4 import java.util.Set;
5
6 //无序不可重复
7 public class TestSet {
8
9 public static void main(String[] args) {
10
11 //set TreeSet HashSet
12
13 Set<String>set=new HashSet<String>();
14
15 set.add("jck");//往set集合里面添加一个元素
16 set.add("jcka");
17 set.add("rose");
18 set.add("tom");
19 set.add("jck");//添加重复元素是不会报错的 当做没有看到
20
21 System.out.println(set.size());
22
23 Set<Person>setPer=new HashSet<Person>();
24
25 Person p1=new Person("jack",12);
26 Person p2=new Person("jack",22);
27 Person p3=new Person("rose",12);
28 Person p4=new Person("tom",122);
29
30 ////如果重写自己的equals方法 就按照自己的规则去比较
31 setPer.add(p1);
32 setPer.add(p2);//如果没有重写自己的equals方法 就认为你俩的地址不一样就不是同样的对象
33 setPer.add(p3);
34 setPer.add(p4);
35
36 System.out.println(setPer.size());
37
38 for(Person p:setPer){
39 System.out.println(p);
40 }
41 }
42
43 }
44
45
46 class Person{
47 private String name;
48 private int age;
49
50 //有参构造器
51 public Person(String name, int age) {
52 this.name = name;
53 this.age = age;
54 }
55
56 //无参构造器
57 public Person() {
58 }
59
60
61 //我们的HashSet,在判断重复的元素的时候
62 //1 判断这两个内容的hash值是不是相等个 相等有可能发生了hash碰撞 不相等就不是同一个元素
63 //2 如果发生hash碰撞 就会调用equals方法 来确定这个对象里面的字段是否一致
64
65 @Override
66 public int hashCode() {
67 final int prime = 31;
68 int result = 1;
69 result = prime * result + age;
70 result = prime * result + ((name == null) ? 0 : name.hashCode());
71 return result;
72 }
73
74 @Override
75 public boolean equals(Object obj) {
76 if (this == obj)
77 return true;
78 if (obj == null)
79 return false;
80 if (getClass() != obj.getClass())
81 return false;
82 Person other = (Person) obj;
83 // if (age != other.age)
84 // return false;
85 if (name == null) {
86 if (other.name != null)
87 return false;
88 } else if (!name.equals(other.name))
89 return false;
90 return true;
91 }
92
93 @Override
94 public String toString() {
95 return "Person [name=" + name + ", age=" + age + "]";
96 }
97
98
99
100 }
