Java 多值作为地图集合中的键

Java 多值作为地图集合中的键,java,sql,map,Java,Sql,Map,问题:我将表的SQL语句存储在映射中,因为表的PK值映射到相应的insert/select语句。但是现在我遇到了一个使用复合键(4pk)的表 现在我的逻辑基础动摇了,因为我读到数组不能用作任何地图中的键,有什么办法可以克服这个问题吗 我宣布地图如下 Map<String, String> pkMap= new Map<String, String>(); Map pkMap=newmap(); 其中,键是表的主键 注意:我正在处理数据库中的几个表,不是所有表都有4个P

问题:我将表的SQL语句存储在映射中,因为表的PK值映射到相应的insert/select语句。但是现在我遇到了一个使用复合键(4pk)的表

现在我的逻辑基础动摇了,因为我读到数组不能用作任何地图中的键,有什么办法可以克服这个问题吗

我宣布地图如下

Map<String, String> pkMap= new Map<String, String>();
Map pkMap=newmap();
其中,键是表的主键


注意:我正在处理数据库中的几个表,不是所有表都有4个PK作为复合键,少数表可能只有2个或1个

您可以简单地使用
列表
作为键(如果您想支持异构类型,甚至可以使用
列表
)。如果两个列表的大小相同,并且其所有成员都相等,则两个列表是相等的。

定义一个键类如何:

class DBKeys {
 private List<String> keys = new ArrayList<String>;

 public void addKeyToList(String key) {
     keys.add(key);
 }

  public List<String> getKeys() {
      return keys;
 }

 // override hashcode and equals as well
}
类DBKeys{
私有列表密钥=新的ArrayList;
public void addKeyToList(字符串键){
key.add(key);
}
公共列表getKeys(){
返回键;
}
//重写hashcode和equals
}
然后将地图定义为

 Map<DBKeys,String> = new HashMap<DBKeys,String>
Map=newhashmap

创建一个包含四个属性的不可变类,并将其用作地图中的键类型。不要忘记覆盖
hashcode
equals
@jlordo yes,但并非所有表都有4个主键,少数表可能只使用2个主键组成复合键,因此主键计数不是静态的,因此可以使用
列表
或数组。只需确保它是不可变的,并覆盖
equals
hashcode