HashSet

原创 2016年08月28日 21:01:17

Set集合:不允许重复元素。和collection的方法相同。Set集合取出的方法只有一个:迭代器


HashSet:不保证顺序,哈希表(散列表)结构
1.不允许存储重复元素,因为会发生查找的不确定性
2.不保证存入和取出的顺序一致


如何保证唯一性?
元素必须覆盖hashCodeequals方法
覆盖hashCode方法是为了根据元素自身的特点确定哈希值。
覆盖equals方法是为了解决哈希值的冲突


当哈希算法算出的两个元素的值相同时,称为哈希冲突。

冲突后,如果两元素不同,则会根据地址链接法(拉链法)继续算位置
冲突后,需要对元素进行进一步的判断,判断的是元素的内容(equals)

哈希表在判断元素是否相同,依据hashCode方法,如果哈希值重复(哈希值相同)
再判断元素的equals方法,如果equals返回true,不存;返回false,存储!


import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class HashSetTest {

	public static void main(String[] args) {
		//创建hashSet容器
		Set set = new HashSet();
		
		//往容器里面添加自定义元素
		set.add(new Student("xiaoqiang",15));
		set.add(new Student("wangcai",21));
		set.add(new Student("xiaoming",26));
		set.add(new Student("xiaoming",26));
		set.add(new Student("daniu",21));
		set.add(new Student("dani",21));
		
		
		//从hashSet集合里面取出自定义元素
		for (Iterator it = set.iterator(); it.hasNext();) {
			Student stu = (Student) it.next();
			System.out.println(stu.getName()+"--"+stu.getAge());
			
		}
	}

}

//创建Student类
class Student{
	private String name;
	private int age;
	public Student() {
		super();
	}
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "NewPeople [name=" + name + ", age=" + age + "]";
	}
	
	//覆盖hashCode方法
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		return result;
	}
	
	//覆盖equals方法
	@Override
	public boolean equals(Object obj) {
		System.out.println(this+"--compare--"+obj);
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
			if(!name.equals(other.name)){
				return false;
			}
		
		return true;
	}
}


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)