HashSet() Set 的实现类,内部是哈希结构,保证元素的惟一性的方式依赖于:hashCode()【计算存储位置】equals()【解决哈希冲突】
无序的原因:计算出哈希值后存储的位置和添加进去的顺序很有可能是不一致的。
当元素存储到,HashCode() 中时,第一步都是先计算出元素对应的哈希值。而在上述的例子中,存储自定义的学生对象时,无法体现元素唯一行是因为,在堆中的每new 一个 对象,都有一个存储位置,都有一个独一无二的哈希值
需求:
在上述的情境下,仍然想要按照同姓名同年龄来保证学生对象的惟一性
解决办法:不使用Object 中的hashCode() 方法,自己重写hashCode () 方法
代码:
//HashSetDemo_Set 重写hashCode() 方法依赖于类的成员变量//依赖于姓名和年龄
public int hashCode() {
return name.hashCode()+age;
}
set.add(new