1、Users源码
import java.util.Objects;
/***
* 自定义类
*/
public class Users implements Comparable<Users>{
private String userName;
private int UserAge;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserAge() {
return UserAge;
}
public void setUserAge(int userAge) {
UserAge = userAge;
}
/***
* 自定义类
* @param userName 姓名
* @param userAge 年龄
*/
public Users(String userName, int userAge) {
this.userName = userName;
UserAge = userAge;
}
/***
* 自定义类
*/
public Users() {
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Users users = (Users) o;
return UserAge == users.UserAge &&
Objects.equals(userName, users.userName);
}
// @Override
// public String toString() {
// return "Users{" +
// "userName='" + userName + '\'' +
// ", UserAge=" + UserAge +
// '}';
// }
@Override
public int hashCode() {
return Objects.hash(userName, UserAge);
}
//定义比较规则
@Override
public int compareTo(Users o) {
//年龄排序
if(this.UserAge > o.UserAge)
return 1;
//年龄相同姓名比较
if(this.UserAge == o.UserAge)
return this.userName.compareTo(o.getUserName());
return 0;
}
}
2、TreeMapTest源代码
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class TreeMapTest {
public static void main(String[] args) {
//实例化TreeMap
Map<Users,String> tree = new TreeMap<>();
//实例化Users
Users u1 = new Users("张三",15);
Users u2 = new Users("王五",23);
Users u3 = new Users("陈述",63);
tree.put(u1,"无法言语");
tree.put(u2,"难过");
tree.put(u3,"绝对");
Set<Users> keys = tree.keySet();
for(Users i : keys)
System.out.println(i + "--------" + tree.get(i));
}
}
3、结果运行图
1)不注释toString

2)注释toString

这是什么情况?为什么会出现这种情况?
而且单纯修改一下比较规则还会出现新问题
4、修改截图

5、运行截图

其他两个就没有了?