我希望按照排序方式根据对象属性中的键保存对象。稍后,我将从最大键到最小键顺序访问这些对象。我也会做一些搜索任务。
我考虑使用AVL树或RB树。据我所知,它们在理论上几乎相同(两者都有O(logn))。但实际上,在我的情况下哪一个可能会更好。考虑到我主要是插入并顺序访问ds。还有更好的替代方案。
编辑:我将使用java
答案 0 :(得分:4)
对于它的价值,在C#中,SortedDictionary<K, V>
被实现为红黑树,并且在C ++中的许多STL实现中,std::map<K, T>
被实现为红黑树。 / p>
此外,从AVL与红黑树上的Wikipedia:
AVL树是另一种结构 支持O(log n)搜索,插入, 和删除。它更严格 比红黑树平衡,领先 更慢的插入和删除但是 更快的检索。这样做 对数据结构很有吸引力 可以建造一次并且不加载 重建,如语言 词典(或程序词典, 例如一个的订单代码 汇编或翻译)。
答案 1 :(得分:1)
对于您来说,实施起来最简单,您将无法获得比带有排序列表的log(n)更好的插入,并且我们可能需要比您提供的更多详细信息来确定是否还有其他使另一种结构更合适的因素。
答案 2 :(得分:1)
正如你在Java中所做的那样,考虑使用TreeSet(尽管它是一个Set,所以你不能有重复的条目)......