Tag: abstract data type

Java部分订购了Collection

我正在寻找一个数据结构的Java实现,它包含一个元素集合,其中定义了一个部分排序 ,并允许一个元素以某种拓扑顺序迭代这些元素(任何可能的排序都很好;最好是一个稳定的订购作为集合的内容更改)。 理想情况下,它将实现Collection , Set或SortedSet接口,并支持接口上的所有方法。 在指定总排序方面,可以使用Comparator实例化集合,如果两个被比较的元素没有相互排序,比较器可能抛出exception( ClassCastException ?)。 作为奖励,如果插入的元素会产生排序exception(元素的有序图中的循环),它将抛出exception。 所以,是的,我想要的是一个拓扑排序,但我希望一个集合对象在每次插入/删除时维护该排序顺序 ,类似于SortedSet如何按排序顺序维护集合。 这样的事情存在吗? 在一些开源库中? 参考文献: http://en.wikipedia.org/wiki/Partially_ordered_set http://en.wikipedia.org/wiki/Topological_sorting 更新 在我意识到我的要求的性能影响(以及我无法解决的各种其他问题,使用poset)后,我最终采用了不同的方法解决了我的问题,我不需要一个poset。 依靠比较器来确定元素之间的顺序意味着对于元素插入,我必须针对每个现有元素查询比较器,每次插入花费O(n)。 如果性能不是很重要(它是),并且如果元素的数量被限制在合理的范围内(事实并非如此),我想我会采用Willie建议的方法,尽管可能使用我自己的图形实现和拓扑排序实现以最小化依赖性。

Java ArrayList的时间复杂度

我发现这个问题的其他条目涉及特定方法,但没有全面的。 我想validation自己对这种数据结构中最常用的方法的理解: O(1) – 恒定时间: isEmpty() add(x) add(x, i) set(x, i) size() get(i) remove(i) O(N) – 线性时间: indexof(x) clear() remove(x) remove(i) 它是否正确? 谢谢你的帮助。