zoukankan      html  css  js  c++  java
  • Java 重写hashCode 方法和equals方法

    package Container;
    
    import java.util.HashSet;
    import java.util.Iterator;
    
    /*
     
    Set 元素是无序的(存入和取出的顺序不一定一致),元素不可以重复
     |---HashSet:底层数据结构是哈希表
     |           HashSet是如何保证元素唯一性呢?
     |			  是通过两个方法来完成的 hashCode 和 equals来完成的
     |			  如果元素的hashCode值相同,才会判断 equals 是否为true
     |           如果hashCode值不相同,不会调用 equals
     |           
     |			 注意:对于判断元素是否存在,以及删除等操作,依赖的方法是元素的
     |			hashCode和equals方法
     |			(arrayList判断元素是否存在只依赖于equals方法)
     |---TreeSet:
    Set 集合的功能和 Collection 是一致的
    
    */
    
    class Person
    {
    	private String name;
    	private int age;
    	Person(String name,int age)
    	{
    		this.name = name;
    		this.age = age;
    	}
    	
    	public String getname()
    	{
    		return name;
    	}
    	
    	public int getage()
    	{
    		return age;
    	}
    	
    	// 重写 hashCode 方法
    	public int hashCode()
    	{
    		// return 1; 这种方法也能得到效果但会调用 equals 方法,并且 比较次数比较多
    		
    		// 该种方法调用 String 的hashCode 方法,就不会调用 equals 方法,比较次数少
    		return name.hashCode()+age*39; // 保证 hashCode 值的唯一性
    	}
    	
    	public boolean equals(Object obj)
    	{
    		if (!(obj instanceof Person))
    		    return false;
    		
    		Person person = (Person)obj;
    		return this.name.equals(person.name) && this.age == person.age;
    	}
    }
    
    public class HashSetDemoTwo
    {
    	public static void sop(Object obj)
    	{
    		System.out.println(obj);
    	}
    	
    	public static void main(String[] args)
    	{
    		HashSet<Person> hs = new HashSet<Person>();
    		
    		hs.add(new Person("a1", 11));
    		hs.add(new Person("a2", 12));
    		hs.add(new Person("a3", 13));
    		hs.add(new Person("a4", 14));
    		hs.add(new Person("a5", 15));
    		hs.add(new Person("a3", 13));
    		
    		System.out.println( hs.contains(new Person("a1", 11)));
    		
    		// 判断 a1 是否存在于集合中
    		sop("al:"+hs.contains(new Person("a1", 11)));
    		
    		// 将 a3 移除集合中
    		hs.remove(new Person("a3", 13));
    		
    		// 遍历集合
    		Iterator<Person> it = hs.iterator();
    		while (it.hasNext())
    		{
    			Person person = (Person) it.next();
    			sop(person.getname()+"==="+person.getage());
    		}
    	}
    }
    

      

  • 相关阅读:
    吉文斯旋转
    MinHash
    MinHash 原理
    Mahout SlopOne
    svd++
    openwrt定制管理
    苹果新的编程语言 Swift 语言进阶(九)--方法和下标
    2014年百度之星程序设计大赛
    unixbench安装及使用
    数据库连接-ADO.NET
  • 原文地址:https://www.cnblogs.com/IamJiangXiaoKun/p/4653600.html
Copyright © 2011-2022 走看看