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数据结构我为您的答案添加了更多细节。谢谢,我不确定我是否足够清楚,我希望在地图中排序键,而不是其中的值。例如