java - 用于收集数学 vector 的良好 Java 类

标签 java math collections vector

我正在实现一个图(如顶点、边,而不是笛卡尔)。我将图表建模为节点的物理集合(我创建的一个类)。

我想要一个力的集合,作为 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/

相关文章:

java - JVM 崩溃..如何获取错误日志或核心转储

java - 如何改进Intellij 8?

java - 关于java中的HashMap实现

java - Java中堆栈行为的最佳类是什么

java - 立即同步 Vaadin 中的两个表

java - 如何用GSON解析变量类型的json?

math - 有 n 个节点的有向图中的最大边数是多少?

numpy 函数给出不正确的结果 - 手动和 Excel 检查

javascript - 加速数字越接近其最大值

java - 如何使用 Int 索引到 String 元素