使用多个键参数化 MultiKeyMap

Parameterize MultiKeyMap with Multiple Keys

有什么方法可以用多个键参数化 Apache Commons 的 MultiKeyMap 吗?即

MultiKeyMap<String, String, Integer, Float> m = new MultiKeyMap<String, String, Integer, Float>();

我最初有原始 MultiKeyMaps 但由于这些映射在我的程序中的频率,我想通过参数化它们来确保一致性。

我不想使用 MultiKeys,因为我存储在 MultiKeyMap 中的数据需要 MultiKey<String, String, Integer>。但是,MultiKey 只支持一种类型的键(MultiKey<String> MultiKey<Integer>)。如果有解决方法,我愿意接受建议。

明确地说,我要解决的总体问题是:我想通过参数化它们来确保程序中的 MultiKeyMaps 具有相同类型的键,但具有不同的 类 在键内 (<K, K, K, V> = <String, String, Integer, Float>).

编辑:有人建议(在现已删除的答案中)我使用 Triple<String, String, Integer>,我试过:

private static MultiKeyMap<Triple<String, String, Integer>, Float> multiKeyMap = new MultiKeyMap<Triple<String, String, Integer>, Float>();
Triple<String, String, Integer> t = Triple.of("asdf", "asdf", 4);
multiKeyMap.put(t, 5);

然而,在该语句的第三行,它似乎期待 put(Triple<String, String, Integer> key1, Triple<String, String, Integer> key2, Float value) 形式的内容。我现在的问题是:有了这个答案,我现在不需要 MultiKeyMap 了吗?我现在应该使用 Map<Triple<String, String, Integer>, Float> 吗?

还值得注意的是,我需要经常遍历这张地图(使用大量数据),这在我有一个非参数化 MultiKeyMap 时很容易,因为我可以只更改参数根据需要在 get() 方法中。使用 Triple,我相信每次迭代我都必须创建一个新的 Triple 实例;这会占用大量资源还是有解决办法?

您可以将 Triple 与任何映射实现(例如 HashMap)一起使用。

您需要为每个查找构造一个三元组,这将对性能产生非零影响,但应该不会有什么大不了的,并且将拥有最干净的代码 imo。

建议您在应用三重更改之前和之后进行 运行 性能测试,看看影响是否可以接受,如果可以,则继续进行。