用HashSet存储自定义对象

#日常练习
关于HashSet的小练习

HashSet不会存入重复元素;
原理:HashSet存储元素前会取到元素的哈希值,哈希值不同时直接存储,
哈希值相同时再调用equals方法判断元素是否已经存在;
存储自定义元素时可以复写HashCode方法来定义元素相同的条件

package Collection;
import java.util.*;

public class HashSetTest {

	//HashSet不会存入重复元素;
	//原理:HashSet存储元素前会取到元素的哈希值,哈希值不同时直接存储,
	//哈希值相同时再调用equals方法判断元素是否已经存在;
	//存储自定义元素时可以复写HashCode方法来定义元素相同的条件
	public static void main(String[] args) {
		HashSet<Administrator> hs = new HashSet<Administrator>();
		hs.add(new Administrator(123,"person1"));
		hs.add(new Administrator(456,"person4"));
		hs.add(new Administrator(789,"person3"));
		hs.add(new Administrator(789,"person3"));
		hs.add(new Administrator(246,"person2"));
		hs.add(new Administrator(246,"person3"));
		

		for(Iterator<Administrator> it = hs.iterator();it.hasNext();) {
			Administrator adm = it.next();
			System.out.println(adm.getCount()+"-->"+adm.getName());
		}


	}

}


被调用类

package Collection;
//将自定义类存入TreeSet中时,自定义类必须实现Comparable接口
class Administrator implements Comparable<Administrator>{


	private int count;
	private String name;
	Administrator(int count,String name){
		this.count = count;
		this.name = name;
	}
	//复写Object类中compareTo方法,定义自己的比较方法。
	public int compareTo(Administrator adm) {
		if(!(adm instanceof Administrator)) {
			throw new RuntimeException("传入的类类型错误!");
		}
		
		if(this.getCount() > adm.getCount()) {
			return 1;
		}
		if(this.getCount() == adm.getCount()) {
			this.getName().compareTo(adm.getName());
			return 0;
		}
		return -1;
		
	}

	public int hashCode() {
		return this.count+this.name.hashCode();
	}

	public boolean equals(Object obj) {
		if(!(obj instanceof Administrator)) {
			throw new RuntimeException("传入的类类型错误!");
		}
		Administrator adm = (Administrator)obj;
		//按照账号和姓名都相同时判断为相同对象;
		return(this.count == adm.count && this.name.equals(adm.name)) ;
		
	}
	
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

}





2017/1/17更新:学习了泛型,完善一下代码,功能没变。



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值