地图数据结构地图
MultiValueMap类(Apache commons集合)使得使用值为Collections的Map变得容易。 我正在寻找一个类,它可以很容易地使用Map,其键是对象,值是Maps。
我正在使用Java 1.4,因此无法使用Google Collections或generics。
地图地图实际上是没有单根节点的树型结构(以及地图地图的地图……)。
您可以查看广泛用于实现树结构的Composite模式 (如果它们的组件具有相同的类型,而不是我认为的情况)。
另一种解决方案是实现简单的域模型。 阅读起来会更加清晰,并且易于维护:
school.getPupil ("John Doe").getMark ("Math")
比
school.get ("John Doe").get ("Math")
常规Map集合适用于此:
Map
事实上,如果您不担心类型安全,可以将任何您想要的东西放入值部分:
Map mapOfWhatever = new LinkedHashMap(); Object newObject = new String("object as string"); mapOfWhatever.put(newObject, new LinkedHashMap()); Map objectMap = (Map) mapOfWhatever.get(newObject);
如果你有一个map:{string,map:{string,thing}}
(故意不使用Java语法来避免整个Java1.4 / Java5业务)那么你还应该考虑是否应该将其建模为map:{tuple:{string,string},thing}
。 如果多级查找占主导地位,那么这是一个很好的改变(假设您实现了一个正确地equals()
并且智能地使用hashCode()
的好tuple
,但是如果你正在进行大量的插入和删除,那么它就不那么好了。
hashCode中的智能可能意味着想出一种合理的方法将来自内容的hashCodes的位混合在一起。 如果成员值预期来自不相交的集合(例如,名称和职业),那么你可以将它们混合在一起 – 不完美,但便宜又快 – 但如果你的控制/确定性较低,那么你需要做其他的事情。 (例如,在XOR之前旋转其中一个值的位)。