说我有一个图表,分别用两个映射(in和out)实现映射(source,set(edge))和(target,set(edge))。直到现在,我也设置了所有的标记,我决定摆脱它。返回边集现在更加困难,因为我必须将其中一个贴图的值展平。什么是最好(最快)的方式呢?或者我应该保留allEdges(我不太关心内存,只是觉得它有点多余)。
感谢
答案 0 :(得分:5)
时间和空间是典型的权衡。您可以显式存储边集,牺牲所需的空间量而不必计算它,或者您可以回收该空间并在需要时计算所有边的集合。
从你的帖子看,前者似乎是更好的决定。不要担心“正确的方法” - 担心你的应用程序有什么意义。
答案 1 :(得分:0)
请注意,如果您使用google-collections中的SetMultimap
,则可以使用multimap.values()
轻松查看所有边的集合。在您的情况下,如果我理解正确,该集合中将不会有重复项,但遗憾的是它实际上不会实现Set
。要获得一组,请使用ImmutableSet.copyOf(multimap.values())
。
是的,如果您经常需要它作为一个集合,那么保持冗余Set
并随时更新它是有意义的。
或者你可以抓住所有这些并使用全功能的图形库,例如JUNG。