Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按键排序哈希映射?_Java_Spring_Hashmap_Entity - Fatal编程技术网

Java 按键排序哈希映射?

Java 按键排序哈希映射?,java,spring,hashmap,entity,Java,Spring,Hashmap,Entity,我有一个包含以下条目的HashMap: 键-狗对象 值-狗的描述 Map<Dog, List<String>> DogsAndDescriptions; 有可能这样做吗?这实际上是不可能的,因为hashmap是一个无序列表 您可以使用java.util.LinkedHashMap,它使用插入顺序,但我认为您在这里真正想要的是,它将支持其中元素的自然顺序 如果你添加了一个比较器,它会吐出最老的狗,那么树形图会按照这个顺序为你排序 树映射是接口的一种实现,因此您可以用与刚才

我有一个包含以下条目的
HashMap

-狗对象 -狗的描述

Map<Dog, List<String>> DogsAndDescriptions;

有可能这样做吗?

这实际上是不可能的,因为hashmap是一个无序列表

您可以使用java.util.LinkedHashMap,它使用插入顺序,但我认为您在这里真正想要的是,它将支持其中元素的自然顺序

如果你添加了一个比较器,它会吐出最老的狗,那么树形图会按照这个顺序为你排序

树映射是接口的一种实现,因此您可以用与刚才相同的方式与它进行交互

TreeMap<Dog, List<String>> dogsAndDescriptions = new TreeMap<Dog, List<String>>();
TreeMap dogsAndDescriptions=newtreemap();
将实例化(不要大写变量)dogsAndDescriptions映射的实例。作为树映射构造函数的一部分,您可以做的是传入一个,它将控制您的狗如何作为键进行排序,或者使Dog类扩展为Compariable并覆盖Comparieto方法,基本上类似于

class Dog implements Comparable<Dog>{
    //somecode

    @Override
    public int compareTo(Dog o) {
        return birthday.compareTo(o.birthday);
    }
}
类狗实现可比性{
//一些代码
@凌驾
公共内部比较(狗o){
返回生日。比较(o.生日);
}
}

所以你可以看到,这将根据狗的生日进行比较。我将链接到一个例子,因为我认为比较器如何工作是一个不同的问题。但这是两种分类方法

这实际上是不可能的,因为hashmap是一个无序列表

您可以使用java.util.LinkedHashMap,它使用插入顺序,但我认为您在这里真正想要的是,它将支持其中元素的自然顺序

如果你添加了一个比较器,它会吐出最老的狗,那么树形图会按照这个顺序为你排序

树映射是接口的一种实现,因此您可以用与刚才相同的方式与它进行交互

TreeMap<Dog, List<String>> dogsAndDescriptions = new TreeMap<Dog, List<String>>();
TreeMap dogsAndDescriptions=newtreemap();
将实例化(不要大写变量)dogsAndDescriptions映射的实例。作为树映射构造函数的一部分,您可以做的是传入一个,它将控制您的狗如何作为键进行排序,或者使Dog类扩展为Compariable并覆盖Comparieto方法,基本上类似于

class Dog implements Comparable<Dog>{
    //somecode

    @Override
    public int compareTo(Dog o) {
        return birthday.compareTo(o.birthday);
    }
}
类狗实现可比性{
//一些代码
@凌驾
公共内部比较(狗o){
返回生日。比较(o.生日);
}
}

所以你可以看到,这将根据狗的生日进行比较。我将链接到一个例子,因为我认为比较器如何工作是一个不同的问题。但这是两种分类方法

在你的
Dog
类中实现
Comparable
接口,该实现将强制
Dog
生日
,并使用
TreeMap
在其中存储
Dog
对象。下面是
Dog
类的示例实现:

    class Dog implements Comparable<Dog>{
        public Dog(String name, Date dob) {
            this.name = name;
            this.birthday = dob;
        }

        private String name;
        private Date birthday;

        @Override
        public int compareTo(Dog o) {
            return birthday.compareTo(o.birthday);
        }

        @Override
        public String toString() {
            return name;
        }
    }
类狗实现可比性{
公用狗(字符串名称、日期和出生日期){
this.name=名称;
this.birth=dob;
}
私有字符串名称;
私人约会生日;
@凌驾
公共内部比较(狗o){
返回生日。比较(o.生日);
}
@凌驾
公共字符串toString(){
返回名称;
}
}
注意:为了简单起见,我使用了任何附加注释


您不能使用
HashMap
Dog
键上保留某种排序顺序,因为
HashCode
不保留任何顺序。有关更多信息,请参阅:

在您的
Dog
类中实现
Compariable
接口,该接口的实现将强制
Dog
生日
,并使用
树形图
在其中存储
Dog
对象。下面是
Dog
类的示例实现:

    class Dog implements Comparable<Dog>{
        public Dog(String name, Date dob) {
            this.name = name;
            this.birthday = dob;
        }

        private String name;
        private Date birthday;

        @Override
        public int compareTo(Dog o) {
            return birthday.compareTo(o.birthday);
        }

        @Override
        public String toString() {
            return name;
        }
    }
类狗实现可比性{
公用狗(字符串名称、日期和出生日期){
this.name=名称;
this.birth=dob;
}
私有字符串名称;
私人约会生日;
@凌驾
公共内部比较(狗o){
返回生日。比较(o.生日);
}
@凌驾
公共字符串toString(){
返回名称;
}
}
注意:为了简单起见,我使用了任何附加注释


您不能使用
HashMap
Dog
键上保留某种排序顺序,因为
HashCode
不保留任何顺序。有关详细信息,请参阅:

1)获取地图2)获取密钥集3)转换为列表4)按年龄排序5)使用此列表中的密钥。如果您想订购密钥,请使用TreeMap。@Eran可能是从DB获得的。不确定。@sᴜʀᴇsʜᴀᴛᴛᴀ 您能举个例子吗?1)获取地图2)获取密钥集3)转换到列表4)按年龄排序5)使用此列表中的密钥。如果您想对密钥进行排序,请使用TreeMap。@Eran可能是从DB获得的。不确定。@sᴜʀᴇsʜᴀᴛᴛᴀ 你能举个例子吗?好的,你能举个例子吗?我不熟悉treemap数据结构我为您的答案添加了更多细节。谢谢,我不确定我是否足够清楚,我希望在地图中排序键,而不是其中的值。例如:如果A键包含比B键更老的狗,那么A键应该在B键之前,这可能吗?好的,谢谢,所以当我初始化树形图时,它们已经被订购了?我已经实现了您的解决方案,但是当我运行时,我得到错误:“Kennel不能转换为java.lang.Compariable”?我已经在Dog类中实现了类似的接口,我在Kennel中也需要它吗?好的,你能举个例子吗?我不熟悉treemap数据结构我为您的答案添加了更多细节。谢谢,我不确定我是否足够清楚,我希望在地图中排序键,而不是其中的值。例如