有没有办法参数化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
实例;这会导致资源匮乏还是有办法解决这个问题?
答案 0 :(得分:1)
您可以将Triple与任何地图impl(例如HashMap)一起使用。
您需要为每次查找构建一个Triple,这将产生非零的性能影响但不应该是一个巨大的交易,并且将拥有最干净的代码imo。
建议您在应用Triple更改之前和之后运行性能测试并查看影响是否可接受,如果是,则继续进行。