我们知道HashMap的存储位置是按照key这个对象的hashCode来存放的,而TreeMap则是不是按照hashCode来存放,他是按照实现的Comparable接口的compareTo这个方法来存储的,只要compareTo的返回结果为0就表示两个对象相等,那么就存不进去两个对象,后put的就把前面的覆盖掉,甚至我们都不用重写equasls和hashCode方法,而只需要实现Comparable接口来重写comparareTo方法就行了,但是我们不能保证在应用中不会用到HashMap,所以保持良好的习惯,当我们定义了一个对象之后习惯性的重写equals和hashCode方法。本文比较详细的解释了TreeMap、Comparable、Comparator这三者的关联。

  测试Comparable接口:

  第一次比较:定义一个User类,实现Comparable接口,按照年龄排序,我们让equals为true,而hashCode也始终相等。

  

public class User implements Comparable<User> {
    private String id;
    private String name;
    private Integer age;

    public User() {
    }

    public User(String id, String name, Integer age) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + "]";
    }

    @Override
    public boolean equals(Object obj) {
        return true;
    }
    
    @Override
    public int hashCode() {
        return 0;
    }
    public int compareTo(User o) {
        return this.age > o.getAge() ? 1 : this.age == o.getAge() ? 0 : -1;
    }
}

更多相关文章

  1. 接口之命令模式
  2. 关于Java中接口继承接口
  3. php 调用java 接口
  4. 深入理解Java Callable接口
  5. “不是抽象的,也不重写抽象的方法”错误

随机推荐

  1. Android Robotium如何管理测试用例的执行
  2. Android程序老是报错
  3. Java与C互相调用实例详解
  4. 王家林最受欢迎的一站式云计算大数据和移
  5. ffmpeg从视频中提取帧时间戳
  6. Android Web-View:将本地Javascript文件注
  7. Android各种蓝牙设备的UUID
  8. Spannable、Spanned、Editable用法及差别
  9. Androidx学习笔记(79)--- 视频播放器二(Vide
  10. Android的Intel XDK构建错误