欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

用HashSet存储自定义对象

程序员文章站 2024-02-27 23:12:39
...

#日常练习

关于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更新:学习了泛型,完善一下代码,功能没变。