基于时间戳的排序数据结构,具有对数读取复杂性

时间:2017-12-07 13:10:45

标签: java sorting collections

我在java中寻找一个好的排序数据结构。做了一些研究后得到了一些关于使用TreeSet / TreeMap的提示。但是这些组件缺少一件事:随机访问集合中的元素。例如,我想访问有序集合中的第n个元素,但是使用TreeSet,我必须遍历其他n-1个元素才能到达那里。这将是一种浪费,因为我的Set中有数千个元素。

用例如下所示

9:20 AM what is this object? edited by user1
9:30 AM what is this book ? edited by user2
9:40 PM what is this red book? edited by user1

我总是希望该用户显示最新编辑的标题。我知道最新版本的时间戳最大。为此,我发现ConcurrentSkipListSet/Maps很好。但是,我想知道是否有更好的方法来实现这个功能。

1 个答案:

答案 0 :(得分:0)

假设您应该对数据进行排序,最好的选择是TreeMap。没有银弹是一个有序的集合,也可以执行O(1)随机访问。在有序集合中,您可以直接访问带索引的元素,但如果您的集合需要排序,则无法从基于索引的访问中受益。

如果您需要并发,ConcurrentSkipListMap是好的。它适用于大规模并发访问数据。但是,就性能而言,它与我们的基于红黑树的朋友TreeMap无法匹敌。因此,如果您不需要并发,请忘记ConcurrentSkipListMap并坚持使用TreeMap

TreeMap优雅,满足您的需求。尽管如此,在实践中,使用HashMap并在需要时对数据进行排序可能会更好。尝试两者并找出哪一个更适合你的情况。