我们有一个数据库表,该表上的唯一索引是一个复合键(String,int,int)。我想在我的Java类中添加一个将保存此键的字段。我试过了:
Map<String, Integer, Integer>
但IDE告诉我,我不能这样做,因为地图只是Map K,V。
我的问题是表示此密钥的最佳方式是什么?
答案 0 :(得分:2)
Map<String, Integer, Integer>
这不起作用,因为Map
只接受两个类型参数(对于键和值),而不是三个。
创建一个代表键的类。将其用作地图中的关键字。注意:密钥类必须正确实现hashCode
和equals
方法。
答案 1 :(得分:1)
为什么不创建像这样的自定义键 -
class MyKey{
int key1;
int key2;
String key3;
// override hashCode & equals
}
然后,您可以将此类用作密钥
Map<MyKey, Value>
答案 2 :(得分:1)
这取决于你想用它做什么:
您可以创建一个bean作为密钥:
public class MyCompositeKey {
private String field1;
private Integer field2, field3;
//getters and setters here
@Override
public int hashCode() {
//your implementation here, you can use here the hashCode of Integer and String
}
@Override
public boolean equals(Object o) {
if (o instanceof MyCompositeKey) {
MyCompositeKey that=(MyCompositeKey) o;
//compare here the fields
}
return false;
}
}
或者您可以执行以下操作:
String key=field1+"-"+field2+"-"+field3;
并将该字符串用作地图中的键。
或许你只需要一个List<Comparable>
,你可以用前缀顺序添加这三个元素。