我正在从一个文本文件中获取一个具有多个数据字段(3 个字符串字段,两个 int 字段)的对象,计算某个数值,然后我需要在阅读时将它们一个接一个地放入数据结构中他们从文件中。在解析/计算/存储结束时,我需要按该计算值对结构进行排序,以便我可以不断检索/弹出最高值。
我在考虑 PriorityQueue,但是有没有更好的结构呢?
编辑:什么会更快?拥有一个在整个程序流程期间保持自身排序的结构,或者只是将它们放在一个列表中并在最后排序?
我正在从一个文本文件中获取一个具有多个数据字段(3 个字符串字段,两个 int 字段)的对象,计算某个数值,然后我需要在阅读时将它们一个接一个地放入数据结构中他们从文件中。在解析/计算/存储结束时,我需要按该计算值对结构进行排序,以便我可以不断检索/弹出最高值。
我在考虑 PriorityQueue,但是有没有更好的结构呢?
编辑:什么会更快?拥有一个在整个程序流程期间保持自身排序的结构,或者只是将它们放在一个列表中并在最后排序?
正如你所建议的,我会使用 PriorityQueue。它使用堆作为数据结构,可以随时对元素进行排序。完成后,您基本上拥有一个有序列表,因此您可以有效地按顺序读取元素。
如果您正在寻找自然排序,您可以选择TreeSet
. 其中元素使用其自然顺序或在集合创建时提供的Comparator进行排序。
如果我理解正确,您会读取并计算值,将其放入队列中,然后才需要对队列进行排序?因为如果您只对队列进行一次排序(在从文件中读取所有数据之后),那么您可能想要使用LinkedList
实现 Queue.
CompareTo
)LinkedList
withlinkedList.add(myObject)
Collections.sort(linkedList)
如果您将数值计算并存储为元素对象内的变量,则 PriorityQueue 更合适。在这种情况下,您可能需要指定适当的 Comparator 对于同步访问,请使用 PriorityBlockingQueue
如果每个都是一个对象,您是否可以不只是创建一个方法 compateTo 比较您的两个对象以确定哪个应该是第一个,并使用它来对您的对象进行排序(可能存储在数组或列表中?)。
我认为您可能应该研究一下:比较