需要一个 Java 映射/表,其中包含对一个值的多个键。值通常会被改变
2022-09-04 06:06:22
我需要的是一个允许多个键访问单个对象的集合。
我需要经常更改此对象。
对于500k +条目,它也必须有效。
我需要的是一个允许多个键访问单个对象的集合。
我需要经常更改此对象。
对于500k +条目,它也必须有效。
的任何实现都将执行此操作 - 对于在单独的键下可以添加特定值的次数没有限制:java.util.Map<K,V>
Map<String,Integer> m = new HashMap<String, Integer>();
m.put("Hello", 5);
m.put("World", 5);
System.out.println(m); // { Hello->5, World->5 }
如果你想要一个将单个键与多个值相关联的映射,这称为多映射,你可以从谷歌java集合API或Apache的commons-collections中获取一个。
我对他的要求有不同的解释。如果想要两个完全不同的键集来访问相同的基础值,该怎么办?例如:
"Hello" ------|
|----> firstObject
3 ------|
"Monkey" ------|
|----> secondObject
72 ------|
14 -----------> thirdObject
"Baseball" ------|
|----> fourthObject
18 ------|
显然,有两个映射(一个用于整数键,一个用于字符串键)是行不通的,因为一个映射中的更新不会反映在另一个映射中。假设您修改了 ,更新“猴子”以映射到第五个对象。此修改的结果是更改该地图内,但这当然对其他地图没有影响。因此,虽然您的意图是:Map<String,Object>
Entry<String,Object>
"Monkey" ------|
|----> fifthObject
72 ------|
你实际上会得到的是这样的:
"Monkey" -----------> fifthObject
72 -----------> secondObject
在这种情况下,我所做的是让两个并排映射,但不是让它们说我会做它们,其中关联的数组是单个成员数组。第一次将键与值关联时,如果尚不存在数组并且该键返回 null,我将创建数组,并将我希望的任何其他键与它关联(在该键的映射中)。随后,我只修改数组的内容,但从不修改对数组本身的引用,这就起作用了。Map<String, Integer>
Map<String, Integer[]>
"Monkey" -------> fifthObjectArray ------|
|-----> fifthObjectArray[0]
72 -------> fifthObjectArray ------|