1 重写equals方法 为什么需要重写hashCode
o1 euqal o2,但是hashCode不同,那么以map中put方法为例:
先hashCode,后equal,hashCode不同,那么不会放到同一个链表中,所以两个对象都能放到map中,但是两个对象可能equals,这就出现了map中key相同的问题
所以Java对于eqauls方法和hashCode方法是这样规定的:
如果两个对象equal,那么它们的hashCode值一定要相同。
public class DashboardBoard implements Serializable {
private String boardName;
public String getBoardName() {
return boardName;
}
public void setBoardName(String name) {
this.boardName = name;
}
@Override
public boolean equals(Object o){
if(o == null){
return false;
}
if(o.getClass() != this.getClass()){
return false;
}
DashboardBoard b = (DashboardBoard)o;
if(b.getBoardName() != null && (b.getBoardName().equals(this.getBoardName()))){
return true;
}
return false;
}
@Override
public int hashCode(){
if(null == this.getBoardName()){
return 0;
}
return this.getBoardName().hashCode();
}
}
equal方法
1) 判空,空直接返回false
2) 判class ==,不等返回false
3)属性比较
4)一定重写hashCode方法
2 对象比较
comparable compareTo(T) 接口,自然排序
comparator compare(T1,T2) 类,定制排序
有个不成名规定compare(T1,T2),如果T1>T2,那么compare的结果应该为正,可以理解为减的关系
https://blog.csdn.net/u011240877/article/details/53399019
public class User implements Comparable {
int age ;
int num;
public static void main(String[] args) {
// 采取实现Comparable方式,重写compareTo方法
TreeSet<User> users = new TreeSet<>();
users.add(new User(12));
users.add(new User(10));
users.add(new User(14));
for(User user : users){
System.out.println(user.getAge());
}
// 采取Comparator方式,此时以comparator为准
TreeSet<User> users1 = new TreeSet<>((o1, o2) -> o1.getNum()-o2.getNum());
// TreeSet<User> users1 = new TreeSet<>(new Comparator<User>() {
// @Override
// public int compare(User o1, User o2) {
// return o1.getNum()-o2.getNum();
// }
// });
users1.add(new User(12,11));
users1.add(new User(10,12));
users1.add(new User(14,13));
for(User user : users1){
System.out.println(user);
}
}
public User(int age){
this.age = age;
}
public User(int age, int num){
this.age = age;
this.num = num;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Object o) {
if(o instanceof User){
return this.getAge()-((User) o).getAge();
}
return 0;
}
}