当前位置: 首页 > 知识库问答 >
问题:

当哈希图的值相同时,如何根据键对象的属性对哈希图进行排序?

慕金林
2023-03-14

我有一个HashMap,其中类的对象(对象1,对象2,对象3)作为键,java.util.Date(日期1,日期2,日期3)作为值。HashMap已经根据值进行了排序,即基于日期对象。键对象具有名为name的属性。

obj1.name = "name1", obj2.name = "name2" etc.

现在,当HashMap的值相同时,即当值的日期相同时,我需要检查键对象的名称(obj.name),并根据键对象的名称属性对HashMap进行排序。请注意,只有当HasHMap和值的日期相同时,我才需要根据键对象的名称属性进行排序。

例如,我有下面的HashMap

[obj1=Tue Jul 01 00:00:00 IST 2014,obj2=Thu Jul 03 00:00:00 IST 2014,obj3=Thu Jul 03 00:00:00 IST 2014,obj4=Sun Jul 06 00:00:00 IST 2014]

每个关键对象的名称属性是

obj1.name = "B";

obj2.name = "D";

obj3.name = "A";

obj4.name = "C";

最后我需要对 HashMap 进行排序以按 [obj1,obj3,obj2,obj4] 的顺序获取键集,因为键 obj2 和 obj3 具有相同的日期值,因此要根据键对象的 name 属性进行排序。

共有1个答案

萧明贤
2023-03-14

为此,可以使用Java可比较接口,使您的类实现此接口,然后根据比较名称实现其compareTo()方法。

public class Emp implements Comparable<Emp>{
    int id;
    String name;

    Emp(int id, String name){
        this.id = id;
        this.name = name;
    }

    @Override
    public int compareTo(Emp o) {
        return this.name.compareTo(o.name);
    }
}

我建议不要使用HashMap,而是使用TreeMap(或将其转换为TreeMap),它将根据键的自然顺序插入记录,在这种情况下,基于完成的比较。

Map<Emp, EmpData> map = new TreeMap<>();

map.put(e1,data1);
map.put(e2,data2);
map.put(e3,data3);
map.put(e4,data4);

map.forEach((Emp, Empdata) -> System.out.println("Key : "+Emp.toString()+", Value: "+Empdata.toString()));
 类似资料:
  • 例如,我有Hashmap 如何根据键的某些属性对Map进行排序?

  • 问题内容: 假设我有一些新闻存储在哈希中。我有不同的哈希值(每个哈希值代表一个消息): 我想用KEYS命令检索所有键: 密钥未排序的问题: 我想以正确的顺序检索键列表。我不确定哈希是否是我需要的结构。但是,根据redis文档: Redis哈希是字符串字段和字符串值之间的映射,因此它们是表示对象的理想数据类型(例如,具有多个字段(例如名称,姓氏,年龄等)的用户): 将我的新闻对象存储在散列中似乎是个

  • 我有一个代码,我需要跟踪不同类别中给定位置的一些值(随机出现)(并且数量相当大;~40,000),所以我认为散列散列是最好的方法,类别作为第一层键,位置作为第二层,值作为值;类似于: 然后,我需要按照这两个类别的顺序对它们进行排序和打印,然后进行定位,得到如下输出文件: 但是我无法计算出嵌套排序的语法(或者,有人比这种方法有更好的想法吗?

  • 问题内容: 从这个问题出发,我很想知道何时 计算 python对象的哈希值? 在某个实例的时间 第一次叫 每次都被调用,或者 我还有其他机会吗? 这可能会根据对象的类型而有所不同吗? 为什么其他整数等于其哈希值呢? 问题答案: 通常可以在每次使用哈希时进行计算,因为您可以很容易地检查一下自己(请参阅下文)。当然,任何特定对象都可以自由缓存其哈希。例如,CPython字符串执行此操作,但元组不执行此

  • 问题内容: 我有一个,我想找到每个值的键数 根据上面的帖子,我尝试了平面映射: 输出是 这意味着0有两个键,1有三个键,依此类推。现在,我想根据键的数量以降序对键和值进行排序。我尝试过这样的事情: 我想要以下输出: 键和值应根据此键的数量降序排列:1、2、3、4具有三个键,0和5具有两个键。 例如::1具有三个键,因此它首先出现:2和3具有三个键,而0仅具有两个键。 问题答案: 您可能具有以下内容

  • 问题内容: 我有一堆带有前缀的散列,例如:“ prefix:” 在每个哈希值下面是一堆键,例如:“ cc_XX”,其中“ XX”是2个字母的代码。 我需要一些如何遍历所有redis散列的方法,并删除每一个cc_XX子键的某些方法,并且正在寻找一种cli / lua方式来做到这一点(两者都不好)。 任何建议将不胜感激。 问题答案: 下面的EVAL脚本应执行所需的操作: 您需要通过提供以下参数来调用它