• 重写Java Object对象的hashCode和equals方法实现集合元素按内容判重


    Java API提供的集合框架中Set接口下的集合对象默认是不能存储重复对象的,这里的重复判定是按照对象实例句柄的地址来判定的,地址相同则判定为重复,地址不同不管内容如何都判定为不重复,这有时与需求不符,可以通过重写hashCode和equals方法实现按照集合元素的任意内容判定重复。

    public class Employee implements Cloneable
    {
    	private int id;
    	private String name;
    
    	public Employee(int id, String name)
    	{
    		super();
    		this.id = id;
    		this.name = name;
    	}
    
    	public int getId()
    	{
    		return id;
    	}
    
    	public void setId(int id)
    	{
    		this.id = id;
    	}
    
    	public String getName()
    	{
    		return name;
    	}
    
    	public void setName(String name)
    	{
    		this.name = name;
    	}
    
    	@Override
    	public int hashCode()
    	{
    		return this.getId();
    	}
    
    	@Override
    	public boolean equals(Object obj)
    	{
    		if (this == obj)
    			return true;
    		if (obj == null)
    			return false;
    		if (getClass() != obj.getClass())
    			return false;
    
    		Employee other = (Employee) obj;
    		if (id != other.id)
    			return false;
    
    		return true;
    	}
    
    	@Override
    	protected Employee clone() throws CloneNotSupportedException
    	{
    		return (Employee) super.clone();
    	}
    
    }
    
    public class Test
    {
    
    	public static void main(String[] args) throws CloneNotSupportedException
    	{
    		Set<Employee> set = createEmployeeSet();
    		System.err.println(set.size());
    		for (Employee e : set)
    		{
    			System.out.println(e.getId() + "  " + e.getName());
    		}
    	}
    
    	public static Set<Employee> createEmployeeSet()
    			throws CloneNotSupportedException
    	{
    		Set<Employee> set = new HashSet<Employee>();
    
    		Employee e1 = new Employee(1, "xmc1");
    		Employee e2 = new Employee(2, "xmc2");
    		Employee e3 = e1.clone();
    		Employee e4 = new Employee(2, "xmc3");
    		set.add(e1);
    		set.add(e2);
    		set.add(e3);
    		set.add(e4);
    
    		return set;
    
    	}
    
    }



  • 相关阅读:
    交易之道
    走出幻觉,走向成熟(阅读心得一)
    爱由心生
    正则资料整理(转载)
    需要学习的.NET技术(转载)
    抽象类与接口的区别
    心存感激
    MYSQL 远程访问被限制
    PHP积累
    Git积累
  • 原文地址:https://www.cnblogs.com/xmc0551/p/5645578.html
Copyright © 2020-2023  润新知