使用多个键参数化MultiKeyMap

时间:2015-12-21 14:24:39

标签: java dictionary parameterization multikey

有没有办法参数化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具有相同类型的键,但键中包含不同的类({ {1}})。

编辑:有人建议(在现在删除的答案中)我使用了<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实例;这会导致资源匮乏还是有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以将Triple与任何地图impl(例如HashMap)一起使用。

您需要为每次查找构建一个Triple,这将产生非零的性能影响但不应该是一个巨大的交易,并且将拥有最干净的代码imo。

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