Java 树映射比较器未给出预期的顺序?

Java 树映射比较器未给出预期的顺序?,java,list,entity,comparator,treemap,Java,List,Entity,Comparator,Treemap,我正在尝试创建具有以下格式的树状图: TreeMap<Kenel, List<Dog>> treeMapOfKennelsAndDogs; 服务类中的比较器逻辑: Comparator<Kennel> oldestDog = new Comparator<Kennel>() { @Override public int compare(Kennel k1, Kennel k2) {

我正在尝试创建具有以下格式的
树状图

TreeMap<Kenel, List<Dog>> treeMapOfKennelsAndDogs;
服务类中的比较器逻辑:

    Comparator<Kennel> oldestDog = new Comparator<Kennel>() {
        @Override
        public int compare(Kennel k1, Kennel k2) {

            int result = k1.getOldestDogInList().compareTo(k2.getOldestDogInList());

            return result;
        }
    };

  TreeMap<Kennel, List<Dog>> treeMapOfKennelsAndDogs = new TreeMap<>(oldestDog);    
比较器oldestDog=新比较器(){ @凌驾 公共整数比较(犬舍k1、犬舍k2){ int result=k1.getOldestDogInList().compareTo(k2.getOldestDogInList()); 返回结果; } }; TreeMap treeMapOfKennelsAndDogs=新的TreeMap(旧的); 代码中是否存在会导致树映射中顺序错误的错误

服务类中的比较器逻辑:

    Comparator<Kennel> oldestDog = new Comparator<Kennel>() {
        @Override
        public int compare(Kennel k1, Kennel k2) {

            int result = k1.getOldestDogInList().compareTo(k2.getOldestDogInList());

            return result;
        }
    };

  TreeMap<Kennel, List<Dog>> treeMapOfKennelsAndDogs = new TreeMap<>(oldestDog);    
TreeSet不知道您的服务类别。它只知道内部的泛型类型

第一个解决方案:

比较器逻辑应位于将在
TreeSet
中排序的类中。您应该在
Kennel
类中实现
Comparator
和ovverade
compare
方法

第二次解决方案:

创建树映射时设置比较器

TreeMap<Kenel, List<Dog>> treemap = new TreeMap<Kenel, List<Dog>>(new Comparator<Kenel>() {
    public int compare(Kennel k1, Kennel k2) {
        int result = k1.getOldestDogInList().compareTo(k2.getOldestDogInList());
        return result;
    }
});
TreeMap TreeMap=newtreemap(newcomparator(){
公共整数比较(犬舍k1、犬舍k2){
int result=k1.getOldestDogInList().compareTo(k2.getOldestDogInList());
返回结果;
}
});
相关问题:

服务类中的比较器逻辑:

    Comparator<Kennel> oldestDog = new Comparator<Kennel>() {
        @Override
        public int compare(Kennel k1, Kennel k2) {

            int result = k1.getOldestDogInList().compareTo(k2.getOldestDogInList());

            return result;
        }
    };

  TreeMap<Kennel, List<Dog>> treeMapOfKennelsAndDogs = new TreeMap<>(oldestDog);    
TreeSet不知道您的服务类别。它只知道内部的泛型类型

第一个解决方案:

比较器逻辑应位于将在
TreeSet
中排序的类中。您应该在
Kennel
类中实现
Comparator
和ovverade
compare
方法

第二次解决方案:

创建树映射时设置比较器

TreeMap<Kenel, List<Dog>> treemap = new TreeMap<Kenel, List<Dog>>(new Comparator<Kenel>() {
    public int compare(Kennel k1, Kennel k2) {
        int result = k1.getOldestDogInList().compareTo(k2.getOldestDogInList());
        return result;
    }
});
TreeMap TreeMap=newtreemap(newcomparator(){
公共整数比较(犬舍k1、犬舍k2){
int result=k1.getOldestDogInList().compareTo(k2.getOldestDogInList());
返回结果;
}
});
相关问题:

  • 比较
    Map
    键的逻辑不应依赖于
    V
  • 映射中插入后是否修改关键点实例?如果是,这是一个问题。相等性检查仅在插入时进行*
  • 树映射所维护的顺序,与任何排序映射一样,无论是否提供显式比较器,都必须与equals一致。(来自javadoc)
  • 比较
    Map
    键的逻辑不应依赖于
    V
  • 映射中插入后是否修改关键点实例?如果是,这是一个问题。相等性检查仅在插入时进行*
  • 树映射所维护的顺序,与任何排序映射一样,无论是否提供显式比较器,都必须与equals一致。(来自javadoc)

  • 如果
    Kenel
    已经包含
    列表
    成员,为什么需要
    树映射
    ?你可以使用
    TreeSet
    来代替。实际的分类是什么?有比其他狗更年轻的狗的犬舍实际上在地图上更早?这是有道理的,因为当你比较日期时,最早的先到。我不知道你的意思是什么?当然最老的应该是树状图中的第一个?如果
    Kenel
    已经包含
    列表
    成员,为什么需要
    treemap
    ?你可以使用
    TreeSet
    来代替。实际的分类是什么?有比其他狗更年轻的狗的犬舍实际上在地图上更早?这是有道理的,因为当你比较日期时,最早的先到。我不知道你的意思是什么?当然最老的应该是树映射中的第一个?我不能改变这个Kennel类,因为它是遗留代码。这就是为什么我要采用当前的方法?@java123999,创建
    适配器模式
    :创建扩展
    犬舍
    的新类,实现
    比较器
    。如果不实现
    Comparator
    @java123999,您的树映射自动排序将不会成功,我编辑了我的问题。我通过设置
    Comparator
    dynamicallyI添加了解决方案,因为它是遗留代码,所以我无法更改这个犬舍类。这就是为什么我要采用当前的方法?@java123999,创建
    适配器模式
    :创建扩展
    犬舍
    的新类,实现
    比较器
    。如果不实现
    Comparator
    @java123999,您的树映射自动排序将不会成功,我编辑了我的问题。我添加了动态设置
    比较器
    的解决方案