本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
可以通过自定义对象equals和hashcode方法实现hashset方法去重,对对象的某个字段相等就可以认定为同一对象,自定义比较方法,hashset会使用对象的自定义方法
@Override
public boolean equals(Object obj){
if(obj == null){
return false;
}else {
if(this.getClass() == obj.getClass()){
ThreatDTO u = (ThreatenLogEqualsDTO) obj;
if(this.getSrc().equals(u.getSrc())){
return true;
}else{
return false;
}
}else{
return false;
}
}
}
@Override
public int hashCode() {//重写hashCode()方法
final int prime = 31;
int result = 1;
result = prime * result + src.hashCode();
return result;
}
hashset的使用 当我们需要存入不重复的数据时就需要用到hashset,而hashset的不重复的秘密就依赖于equals方法和 hashCode方法。
知识引入:什么是哈希表呢?
哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时的位置比较特殊,当需要把这些对象给数组中存放时,那么会根据这些对象的特有数据结合相应的算法,计算出这个对象在数组中的位置,然后把这个对象存放在数组中。而这样的数组就称为哈希数组,即就是哈希表。
hashCode方法作用: 当向哈希表中存放元素时,需要根据元素的特有数据结合相应的算法,这个算法其实就是Object类中的hashCode方法。 总结:运用特殊的算法生成一个哈希数用于给存入的元素定存放的位置。 equals方法的作用: 用于判断存入的数据是否与集合中的数据重复。 举个例子当存入的两个不同的数据经过hashCode方法计算后恰巧得到了相同的哈希数,此时就需要比较他们的内容是否相同。 总结:比较内容是否相同 1.给HashSet中存储JavaAPI中提供的类型元素时,不需要重写元素的hashCode和equals方法,因为这两个方法,在JavaAPI的每个类中已经重写完毕,如String类、Integer类等。
public class student {
private int age ;
private String name;
@Override
public student(String name, int age) {
super();
this.name=name;
this.age=age;
}
public String toString() {
return "student [age=" + age + ", name=" + name + "]";
}
public void setage(int age) {
this.age=age;
}
public int getage() {
return age;
}
public void stename(String name) {
this.name=name;
}
public String getname() {
return name;
}