Java treeset上的性能问题#添加
在我的应用程序中,我使用Java treeset上的性能问题#添加,java,treeset,Java,Treeset,在我的应用程序中,我使用TreeSet作为有序队列。我已经分析了我的应用程序,我花了25%的cpu时间向树集添加元素,但只花了2%的时间弹出最后一个元素。对于有序队列是否有更好的集合?每次我需要使用队列时,添加到链接列表并对其进行排序是否会更有效?您应该使用a而不是树集,因为这是为队列设置的 TreeSet将其用作队列时存在性能问题,因为其内部树结构不适合用作队列。这是因为它的内部结构基于一个TreeMap,而withs使用了,并且该树需要移动许多元素以适应替换顶部元素的插入。在某些情况下,这需
TreeSet
作为有序队列。我已经分析了我的应用程序,我花了25%的cpu时间向树集添加元素,但只花了2%的时间弹出最后一个元素。对于有序队列是否有更好的集合?每次我需要使用队列时,添加到链接列表
并对其进行排序是否会更有效?您应该使用a而不是树集
,因为这是为队列设置的
TreeSet
将其用作队列时存在性能问题,因为其内部树结构不适合用作队列。这是因为它的内部结构基于一个TreeMap
,而withs使用了,并且该树需要移动许多元素以适应替换顶部元素的插入。在某些情况下,这需要完全重建树
使用PriorityQueue
很简单:
PriorityQueue<YourObject> queue = new PriorityQueue<>();
PriorityQueue queue=new PriorityQueue();
与TreeSet
不同,PriorityQueue
允许重复元素,并以FIFO顺序返回
如果您需要踏板安全解决方案,则应使用。关于和各种实现如何?或者,如果您使用树集
,则表示您的元素实现了可比
;这就是你想要的吗?是的,所有元素都是可比较的,PriorityQueue确实稍微快一点,即使我不得不使用相反的方法comperator@Ferrybig在没有更快的解决方案之前,我会接受优先级队列作为答案感谢提示“允许重复元素”,因为使用适当的初始大小来获得最佳性能至关重要,所以TreeSet使用TreeMap,它使用红黑树,根据定义,红黑树永远不会变得不平衡。但是,对于此任务,最好使用PriorityQueue。