Java - 为一个值保留2个键(TreeMap)

时间:2017-01-30 05:30:57

标签: java hashmap treemap

我试图创建Type和Name的复合键,它们都返回String

public String getObjectName() {
    return objectName;
}
public String getObjectType() {
    return objectType;
}

并希望将其存储在Treemap中 objectName和objectType都需要是单个键,第二个String,即需要用户指定的值Type Type

你对此有何建议?

这是我要存储TreeMap的地方

 public static void setDomainDocumentationMap(Map<String, String> domainDocumentationMap) {
    MMTUtil.domainDocumentationMap = domainDocumentationMap;

3 个答案:

答案 0 :(得分:4)

一种方法是连接,如其他答案所示。然后你可以使用它们作为键,并且在值中,输入任何用户输入。 这会导致Map<String, String>类型。

另一种方法是为key创建一个类:

class Key{
    private String objectName;
    private String objectType;

    //TODO write setters here

    public String getObjectName(){
        return objectName;
    }

    public String getObjectType(){
        return objectType;
    }

    public String toString(){
        return objectName + ":separator:" + objectType;
    }

    //TODO implement hashcode and equals method
}

现在你的地图应该是:Map<Key, String>,我相信这应该更灵活。

答案 1 :(得分:0)

您可以使用"@@-#-#-@@"之类的字符串或您确定不会在数据中存在的任何其他字符串连接两个预期密钥,并将此连接字符串作为&#39;密钥& #39;你的地图 将来,如果您需要从&#39;键中检索两个关键字符串&#39;对于地图,只需使用"@@-#-#-@@"字符串拆分地图的密钥。

答案 2 :(得分:0)

由于TreeMap最终只是一个映射,它将具有相同的结构,即键和值。 唯一不同的是:树形图保证其元素将按升序键排序。您需要两个字符串作为复合键然后您可以在这两个字符串之间添加任何分隔符,然后将其添加为键。 例如,如果我们使用#作为分隔符,那么它将 string1#string2 作为键,对它将存储它的值。

代码示例:

public class Test{

    private static final String SEPERATOR ="$$" ;

    private String getCompositekey(String key1, String key2)
    {
    return key1+SEPERATOR+key2;
    }

    public static void main(String[] args){
    Map<String,Object> t = new TreeMap<String,Object>();
    Test test = new Test();
    t.put(test.getCompositekey(test.getObjectName(),test.getObjectType()),VALUEGOESHERE);
    }
}