我在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
很好。但是,我想知道是否有更好的方法来实现这个功能。
答案 0 :(得分:0)
假设您应该对数据进行排序,最好的选择是TreeMap
。没有银弹是一个有序的集合,也可以执行O(1)
随机访问。在有序集合中,您可以直接访问带索引的元素,但如果您的集合需要排序,则无法从基于索引的访问中受益。
如果您需要并发,ConcurrentSkipListMap
是好的。它适用于大规模并发访问数据。但是,就性能而言,它与我们的基于红黑树的朋友TreeMap
无法匹敌。因此,如果您不需要并发,请忘记ConcurrentSkipListMap
并坚持使用TreeMap
。
TreeMap
优雅,满足您的需求。尽管如此,在实践中,使用HashMap
并在需要时对数据进行排序可能会更好。尝试两者并找出哪一个更适合你的情况。