有什么方法可以用多个键参数化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与任何映射impl(例如HashMap)一起使用。
您需要为每次查找构造一个Triple,这将对性能产生非零的影响,但应该不是什么大问题,并且将具有最干净的代码imo。
建议您在应用Triple更改之前和之后运行性能测试,看看影响是否可以接受,如果可以的话,继续进行测试。