我正在实现一个图(如顶点、边,而不是笛卡尔)。我将图表建模为节点的物理集合(我创建的一个类)。
我想要一个力的集合,作为 vector (在数学意义上),来表示作用在每个节点上的力,理想情况下,我希望能够使用节点作为键来执行查找,这对我来说听起来像是某种哈希查找表。
什么是值得使用的好集合,还是我必须自己制作?
如果有什么需要澄清,尽管问。
谢谢
最佳答案
如果我正确理解了您的需求,您基本上想要进行 Node->Vector 的一对多映射。
如果您的节点正确实现了 hashCode() 和 equals(),您可以使用 Multimap来自谷歌 Guava 。这提供了Map<Node,Collection<Vector>>
自动映射。
使用 Multimap 的好处是您不需要这样做:
Collection<Vector> vectors = nodeToVectorMapping.get(node);
if (vectors == null) {
vectors = new HashSet<Vector>();
nodeToVectorMapping.put(node, vectors);
}
vectors.add(vector);
相反,您只需执行以下操作:
nodeToVectorMapping.put(node,vector);
Multimap 负责检查内部 Collection 是否存在。如果您发现自己进入多线程环境,“手动执行”方法将涉及同步以确保两个线程不会同时创建集合,等等。 Google 的 Guava 在这方面提供了很多帮助,而且还有更多帮助。
作为 Google Collections(Multimap 被纳入更大的 Guava 项目之前的原始主页)的忠实粉丝,我还应该为您指出 MapMaker 的方向。 ,它具有各种令人惊奇的优点,您可能会发现它们很有用 - 大小限制、并发级别、基于键的值的延迟初始化等等。我在高并发应用程序中使用过它们,它们多次救了我的命! :)
关于java - 用于收集数学 vector 的良好 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4947190/