如何为唯一标识符设置地图?

时间:2014-03-19 08:13:36

标签: java

我们有一个数据库表,该表上的唯一索引是一个复合键(String,int,int)。我想在我的Java类中添加一个将保存此键的字段。我试过了:

Map<String, Integer, Integer>

但IDE告诉我,我不能这样做,因为地图只是Map K,V。

我的问题是表示此密钥的最佳方式是什么?

3 个答案:

答案 0 :(得分:2)

Map<String, Integer, Integer>

这不起作用,因为Map只接受两个类型参数(对于键和值),而不是三个。

创建一个代表键的类。将其用作地图中的关键字。注意:密钥类必须正确实现hashCodeequals方法。

答案 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>,你可以用前缀顺序添加这三个元素。