Java:哈希映射中的复合键
2022-09-01 05:36:57
我想在哈希图中存储一组对象,其中键应该是两个字符串值的组合。有没有办法做到这一点?
我可以简单地连接两个字符串,但我确信有更好的方法来做到这一点。
我想在哈希图中存储一组对象,其中键应该是两个字符串值的组合。有没有办法做到这一点?
我可以简单地连接两个字符串,但我确信有更好的方法来做到这一点。
您可以有一个包含以下两个字符串的自定义对象:
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();
}
}
您不需要重新发明轮子。只需使用番石榴的界面实现,满足您的需求。下面是一个示例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
祝您编码愉快!