初步认知HashSet

HashSet是通过HashMap<E,Object>来实现的;hashcode是通过哈希表实现的,HashSet中的数据时无序的,可以放入null,但只能放入一个null,两者中的值都不能重复。
HashSet要求放入的对象必须实现hashcode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例,即使一个对象和另一个的对象值是一样,也是可以存进去的,因为这些是按照对象的hashcode是不一样的
HashSet不保证集合的迭代书序,特别是HashSet不保证该顺序恒久不变,如果迭代性能很重要,则不要将初始容量设置的太高(或者将加载因子设置的太低)一般都是0.75。
HashSet底层数据结构是哈希表,通过hashCode方法和equals方法来保证元素的唯一性。比较原理,判断类中的属性各个hashcode 计算的值,如hashcode值相同才会去判断equals,否则,是不会调用equals方法的。
根据以上原理得知,我们必须要重写hashcode()和equals()方法,得以实现同一个类放入的内容不会重复。


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


public class Test {


public static void main(String[] args) {
//new一个hashset
Set<Preson> s= new HashSet<Preson>();
//new一个preson赋值
Preson p=new Preson("xiaohua",18); 
Preson p1=new Preson("ruhua",18);
Preson p2=new Preson("ruhua",18);
Preson p3=new Preson("mahua",19);

// 1.调用equals方法  进行比较,true 丢弃,false 添加
s.add(p);
s.add(p1);
s.add(p2);
s.add(p3);
//遍历preson
for(Preson pp : s) {
System.out.println(pp);
}
}
}


class Preson{
private String name;
private Integer age;

public Preson(String name , Integer age) {
this.name = name;
this.age = age;
}
public String toString(){

return "name = "+ name +";age = "+age;
}

// 获取哈希值
public int hashCode() {


//名字和年龄相同 返回其值
return name.hashCode() + age.hashCode();
}

//Object anObject 表示新加入的对象    
public boolean equals(Object anObject) {
   //把对象强制转换为Preson
Preson  p= (Preson)anObject;
   //this 表示要和他比较的对象 比较两个对象 是不是同一个对象
if(this == p){
return true;//true 表示同一个对象
}


   //判断是不是同一个类型
if(!(anObject instanceof Preson)){
return false;//false 表示不同类型
}


//判断两个的年龄是否相等
if(this.age == p.age){
return true;//true 表示相等
}
return false;


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值