HashSet储存无重复的内容示例

public class Person {
	public String firstName;
	public String lastName;
	public int age;
	
	public Person(String f, String l, int a)
	{
		firstName = f;
		lastName = l;
		age = a>0?a:0;
	}
	
	public String getFirstName()
	{
		return firstName;
	}
	
	public String getLastName()
	{
		return lastName;
	}
	
	public int getAge()
	{
		return age;
	}
	
	public int hashCode()
	{
		//System.out.println(firstName.hashCode() + lastName.hashCode() + age * 37);
		return firstName.hashCode() + lastName.hashCode() + age * 37;
	}
	
	/**
	 * 当hash值相同时,会比较equals,默认比较内容是内存地址
	 * 这里必须被重写,否则HashTree 的equals方法只会比较地址值,因为两个实例的地址值
	 * 都不相同,所以内容相同的元素也会被判断为不相同而现实出来
	 */
	public boolean equals(Object obj)  
	{
		if ( !(obj instanceof Person))
			return false;
		else 
		{
			Person p = (Person) obj;
			if (p.getAge() == age && p.getFirstName() == firstName && 
					p.getLastName() == lastName)
				return true;
			else 
				return false;

		}
	}
}


import java.util.*;

public class HashTest {

	HashSet<Person> hs = new HashSet<Person>();
	
	public void add()
	{
		hs.add( new Person("Z1","S1",21) );
		hs.add( new Person("Z2","S2",22) );
		hs.add( new Person("Z3","S3",23) );
		hs.add( new Person("Z","S",22) );
		hs.add( new Person("Z1","S1",21) );
		
		Iterator it = hs.iterator();
		
		while (it.hasNext())
		{
			Person tempPerson = (Person)it.next();
			System.out.printf("%-6s %-6s %d \n", tempPerson.getFirstName(),
					tempPerson.getLastName(), tempPerson.getAge()	);
		}
		
	}
	
	public static void main(String[] argc)
	{
		HashTest ht =new HashTest();
		ht.add();
	}
}


output
Z      S      22 
Z3     S3     23 
Z1     S1     21 
Z2     S2     22 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值