Hashmap有2个键

时间:2018-04-02 01:54:33

标签: java bukkit

我想用2个键创建一个hashmap。我该怎么做呢?

假设hashmap而不是1个键来查找值需要1个键,然后使用另一个键将搜索范围缩小到某种类型。

我需要它来使用我们提供的播放器。那将是关键1。对于key2,我需要它是一个类型的字符串,可能类似于“fly”或“speed”,然后我需要从那些中获取一个值。

我也不想在这份工作中使用超过1个课程。

如果我能这样做会很好 HashMap但你不能直接这样做。

我已经搜索过了,我还在学习一些java,还在阅读oracle java手册,所以请记住,因为我不确定这是不是一个愚蠢的问题。

此外,我已经搜索了一个答案,但我已经尝试过查看其他用户的问题和答案,但这对我的问题没有帮助。

4 个答案:

答案 0 :(得分:0)

您可以使用以下两个地图来执行此操作:

Map<Kay1DataType, Map<Kay2DataType, V>> map = //...
//...

然后访问您可以执行以下操作:

map.get(Key1).get(Key2);

然后将您可以执行的值设置如下:

Map<Kay2DataType, V> secondMap = //...
secondMap.put(Key2, /* Object of type V*/);

最后加入map

map.put(key1, secondMap);

答案 1 :(得分:0)

这个问题并不完全清楚,但我会尽我最大的努力......

你可以做的唯一合乎逻辑的方法(假设它是一个具有相同类型的密钥和值的HashMap),你可以让一个密钥具有一个值作为第二个值的键,这是理想的价值。我会写一个简单的例子(因为我知道当我尝试用书面解释时,这似乎有点令人困惑。)如果您有任何问题,请随时发表评论。

public class Example {
    static HashMap<String, String> map = new HashMap<>();
    public static void main(String[] args) {
        //The value from the first pair is the key for the second.
        map.put("Key 1", "Value 1");
        map.put("Value 1", "Value 2"); 

        //Prints: Value 2
        System.out.println(map.get(map.get("Key 1")));
    }
}

如果你绝对必须使键/值不同,唯一的方法是两个不同的地图,类似于以下过程:

public class Example {
    static HashMap<String, String> map = new HashMap<>();
    static HashMap<String, Integer> secondMap = new HashMap();
    public static void main(String[] args) {
        //The value from the first pair is the key for the second.
        map.put("Key 1", "Value 1");
        map.put("Value 1", 5); 

        //Prints: 5
        System.out.println(map.get(map.get("Key 1")));
    }
}

希望这有帮助!

答案 2 :(得分:0)

尝试使用Map作为第一个Map的值。例如:

final Map<String,Map<String,String>> doubleKeyMap = new HashMap<>();
final Map<String,String> secondMap = new HashMap<>();
secondMap.put(secondKey, somevalue);
doubleKeyMap.put(mainKey, secondMap);

final String value = doubleKeyMap.get(firstKey).get(secondKey);

答案 3 :(得分:-1)

我认为您可以以某种方式将 2 个键组合成 1 个键。 您可以通过组合它们的 .toString() 或 .hashCode() 来做到这一点。或者,您可以使用 2 个键作为变量创建一个全新的对象。