• 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());
    		}
    	}
    }
    

      

  • 相关阅读:
    android debug:stack trace
    android binder IPC 通信中 asInterface 与 asBinder
    ubuntu WPS 对话框 使用GTK主题的方法
    init.rc
    make_ext4fs 文件权限控制
    百度地图api,点击标注,改变标注marker图标的链接地址
    dispatchEvent 自定义触发事件,常用于自定义鼠标事件或点击事件
    vue 中监听窗口发生变化,触发监听事件, window.onresize && window.addEventListener('resize',fn) ,window.onresize无效的处理方式
    chomre 控制台断点调试
    css,scss解决样式:表格的重叠边框
  • 原文地址:https://www.cnblogs.com/IamJiangXiaoKun/p/4653600.html
Copyright © 2020-2023  润新知