使用多个键参数化 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。
建议您在应用三重更改之前和之后进行 运行 性能测试,看看影响是否可以接受,如果可以,则继续进行。
有什么方法可以用多个键参数化 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。
建议您在应用三重更改之前和之后进行 运行 性能测试,看看影响是否可以接受,如果可以,则继续进行。