Java:哈希映射中的复合键

2022-09-01 05:36:57

我想在哈希图中存储一组对象,其中键应该是两个字符串值的组合。有没有办法做到这一点?

我可以简单地连接两个字符串,但我确信有更好的方法来做到这一点。


答案 1

您可以有一个包含以下两个字符串的自定义对象:

class StringKey {
    private String str1;
    private String str2;
}

问题是,您需要确定两个此类对象的相等测试和哈希代码。

相等可以是两个字符串的匹配,哈希码可以是串联成员的哈希码(这是有争议的):

class StringKey {
    private String str1;
    private String str2;

    @Override
    public boolean equals(Object obj) {
        if(obj != null && obj instanceof StringKey) {
            StringKey s = (StringKey)obj;
            return str1.equals(s.str1) && str2.equals(s.str2);
        }
        return false;
    }

    @Override
    public int hashCode() {
        return (str1 + str2).hashCode();
    }
}

答案 2

您不需要重新发明轮子。只需使用番石榴的界面实现,满足您的需求。下面是一个示例HashBasedTable<R,C,V>Table<R,C,V>

Table<String, String, Integer> table = HashBasedTable.create();

table.put("key-1", "lock-1", 50);
table.put("lock-1", "key-1", 100);

System.out.println(table.get("key-1", "lock-1")); //prints 50
System.out.println(table.get("lock-1", "key-1")); //prints 100

table.put("key-1", "lock-1", 150); //replaces 50 with 150

祝您编码愉快!


推荐