在我的应用程序中,我使用TreeSet
之类的有序队列。我已经分析了我的应用程序,我花费了25%的cpu时间来向TreeSet
添加元素,但是在弹出最后一个元素时只有2%。有序队列是否有更好的集合?添加到LinkedList
并在每次需要使用队列时对其进行排序会更高效吗?
答案 0 :(得分:-1)
您应该使用PriorityQueue
代替TreeSet
,因为这是队列的。
TreeSet
在将其用作队列时会出现性能问题,因为其内部树结构不适合用作队列。这是因为它的内部结构基于TreeMap
,并使用red black tree,并且此树需要移动许多元素以适应替换顶部元素的插入。在某些情况下,这需要完全重建树。
使用PriorityQueue
很简单:
PriorityQueue<YourObject> queue = new PriorityQueue<>();
与TreeSet
不同,PriorityQueue
允许重复元素,并以FIFO顺序返回。
如果您需要踏板安全解决方案,则应使用PriorityBlockingQueue
代替。