HashSet的泛型应用

  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 }

原文地址:https://www.cnblogs.com/dabu/p/12422819.html