使HashSet变的有序并且可以去除重复对象的方法

class Persont

{
  private String name;
  private int age;
  public String getName()

   {
    return name;
  }
  public void setName(String name)

   {
    this.name = name;
  }
  public int getAge()

  {
    return age;
  }
  public void setAge(int age)

   {
    this.age = age;
  }

  Persont(String name,int age)

  {
    this.name=name;
    this.age=age;
  }
  public int hashCode() //重写了hashCode,将所有对象的哈希值设为一致。地址值一致才会运行equals进行重复判断;

  {
    System.out.println(this.getName()+"地址值");
    return this.name.hashCode()+age*39;
    //因为每个字符串都有哈希值,相同字符串哈希值相同。
    /*

    乘39是因为保证哈希值唯一性,比如如果李四name哈希值为4
    0,age是20,王五哈希值为20,age是40,地址值相同,系统会调用equals判断,
    这样运行的就会慢,所以尽量让他少判断

    */
  }
  public boolean equals(Object obj)

  {
    if(!(obj instanceof Persont)){
    return false;
  }

  Persont p=(Persont)obj;
  System.out.println("因地址值相同"+this.name+"比较了(equals运行)"+p.name+"的内容是否相同,相同存,不同不存");
  return this.name.equals(p.name)&&this.age==p.age;
  }
}
public class HashSetpaixu

{

  public static void main(String[] args)

  {

    HashSet a=new HashSet();
    a.add(new Persont("王五",20));
    a.add(new Persont("李四",22));
    a.add(new Persont("李四",22));
    a.add(new Persont("王五",20));
    for(Iterator b=a.iterator();b.hasNext();)

    {
      Persont c=(Persont)b.next();
      System.out.println(c.getName()+c.getAge());
    }
  }

}

猜你喜欢

转载自www.cnblogs.com/shenhengjia/p/9096620.html
今日推荐