首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java偏序Collection<E>

Java偏序Collection<E>
EN

Stack Overflow用户
提问于 2012-09-11 04:35:28
回答 1查看 2.9K关注 0票数 14

我正在寻找一个数据结构的Java实现,该数据结构包含定义了偏序的元素集合,并且允许以某种拓扑顺序迭代这些元素(任何可能的顺序都可以;最好是随着集合内容的变化而具有稳定的排序)。

理想情况下,它将实现Collection<E>Set<E>SortedSet<E>接口,并支持接口上的所有方法。在指定总排序方面,可以使用Comparator<E>实例化集合,比较器可以抛出异常(ClassCastException?)如果两个被比较的元素没有相对于彼此排序。另外,如果插入的元素会产生排序异常(元素有序图中的循环),则会抛出异常。

所以是的,我想要的是拓扑排序,但是我想要一个集合对象,它通过每次插入/删除来维护排序顺序,类似于SortedSet如何按照排序顺序维护一个集合。

像这样的东西存在吗?在某个开源库里?

参考资料:

set

sorting

更新

在认识到需求的性能影响(以及其他各种问题,使用poset时,我无法很好地解决这些问题)之后,我最终采用了一种不同的方法来解决我的问题,在这里我不需要poset。依靠比较器来确定元素之间的顺序意味着,对于元素插入,我必须参照每个现有元素的比较器,每次插入成本为O(n)。

如果性能不是很重要(确实如此),并且如果元素的数量被限制在合理的范围内(不是),我想我会采用Willie建议的方法,尽管可能是使用我自己的图实现和拓扑排序实现来最小化依赖。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-11 05:07:27

有向无圈图是否足以满足您的需要?我知道这通常不会捕获偏序集,但是您提到了想要排除图循环。

如果是这样的话,您可能会看到JGraphT:http://jgrapht.org/

有一个用于拓扑排序的图迭代器。

注意,有向图不是java.util.Collections,但是可以获取顶点,这是一个java.util.Set。如果您需要数据结构本身成为一个集合,您可能可以用一个薄包装(即集合)包装一个JGraphT有向图,将顶点作为元素处理。

这里潜在的缺点是您必须显式地创建边缘,这对于您的应用程序来说可能是可以接受的,也可能是不可接受的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12362819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档