Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java treeset上的性能问题#添加_Java_Treeset - Fatal编程技术网

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。