java - 如何展平集合的集合,我应该在第一时间做到这一点?

时间:2010-02-08 15:34:39

标签: java collections

说我有一个图表,分别用两个映射(in和out)实现映射(source,set(edge))和(target,set(edge))。直到现在,我也设置了所有的标记,我决定摆脱它。返回边集现在更加困难,因为我必须将其中一个贴图的值展平。什么是最好(最快)的方式呢?或者我应该保留allEdges(我不太关心内存,只是觉得它有点多余)。

感谢

2 个答案:

答案 0 :(得分:5)

时间和空间是典型的权衡。您可以显式存储边集,牺牲所需的空间量而不必计算它,或者您可以回收该空间并在需要时计算所有边的集合。

从你的帖子看,前者似乎是更好的决定。不要担心“正确的方法” - 担心你的应用程序有什么意义。

答案 1 :(得分:0)

请注意,如果您使用google-collections中的SetMultimap,则可以使用multimap.values()轻松查看所有边的集合。在您的情况下,如果我理解正确,该集合中将不会有重复项,但遗憾的是它实际上不会实现Set。要获得一组,请使用ImmutableSet.copyOf(multimap.values())

是的,如果您经常需要它作为一个集合,那么保持冗余Set并随时更新它是有意义的。

或者你可以抓住所有这些并使用全功能的图形库,例如JUNG