treeset #add的性能问题

时间:2016-02-18 14:58:43

标签: java treeset

在我的应用程序中,我使用TreeSet之类的有序队列。我已经分析了我的应用程序,我花费了25%的cpu时间来向TreeSet添加元素,但是在弹出最后一个元素时只有2%。有序队列是否有更好的集合?添加到LinkedList并在每次需要使用队列时对其进行排序会更高效吗?

1 个答案:

答案 0 :(得分:-1)

您应该使用PriorityQueue代替TreeSet,因为这是队列的。

TreeSet在将其用作队列时会出现性能问题,因为其内部树结构不适合用作队列。这是因为它的内部结构基于TreeMap,并使用red black tree,并且此树需要移动许多元素以适应替换顶部元素的插入。在某些情况下,这需要完全重建树。

使用PriorityQueue很简单:

PriorityQueue<YourObject> queue = new PriorityQueue<>();

TreeSet不同,PriorityQueue允许重复元素,并以FIFO顺序返回。

如果您需要踏板安全解决方案,则应使用PriorityBlockingQueue代替。