gpt4 book ai didi

java - 用于收集数学 vector 的优秀 Java 类

转载 作者:行者123 更新时间:2023-12-04 06:35:23 24 4
gpt4 key购买 nike

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

我想要一个力的集合,作为 vector (在数学意义上),来表示作用在每个节点上的力,理想情况下,我希望能够以节点为键执行查找,这听起来对我来说就像某种哈希查找表。

什么是好的 Collection 品,或者我必须自己制作?

如果有什么需要澄清的,尽管问。

谢谢

最佳答案

如果我正确理解了您的需求,那么您基本上想要进行 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com