2013-03-17 2 views
1

Я беру в объект с несколькими полями данных (3 строковых поля, два поля int) из текстового файла, вычисляя определенное числовое значение, а затем мне нужно поместить их в структуру данных, одну когда я прочитал их из файла. К концу разбора/вычисления/хранения мне нужна структура, которая будет сортироваться по этому рассчитанному значению, чтобы я мог постоянно извлекать/всплывать с наивысшим значением.Структура сортировки данных Java

Я думаю PriorityQueue, но есть ли какие-либо улучшения для этого?

EDIT: что было бы быстрее? Имея структуру, которая поддерживает себя для сортировки в течение всего потока программы ИЛИ просто помещая их в список и сортируя в конце?

+2

кажется, что 'PriorityQueue' подходит вам лучше всего в этом случае – nullpotent

+0

Если вы когда-либо хотите, чтобы получить первый элемент его кольцо с добавлением элементов, выигрывает PriorityQueue. Если это не так, это вызов между PriorityQueue и List, который вы позже сортируете. Обратите внимание, что PriorityQueue быстро получает элемент с наименьшим значением, поэтому вам нужно будет скорректировать свои сравнения, чтобы сделать тот, который вы хотите получить. –

ответ

1

Я хотел бы использовать PriorityQueue, как вы предлагаете. Он использует кучу в качестве структуры данных, которая сохраняет элементы отсортированными по ходу. Как только вы закончите, у вас есть упорядоченный список, чтобы вы могли эффективно читать элементы в порядке.

0

Если вы ищете естественный заказ, вы можете выбрать TreeSet. где элементы упорядочиваются с использованием их natural ordering или Comparator, предоставленных в заданное время создания.

-1

Если каждый из них является объектом, вы можете не просто создать метод compateTo, который сравнивает два ваших объекта, чтобы решить, что должно быть первым, и использовать их для сортировки ваших объектов (возможно, они хранятся в массиве или списке?).

Я думаю, вы должны, возможно, взглянуть на это: Compare To

+0

Вопрос задает вопрос об очередях автоматической сортировки в Java, а не о методах сравнения объектов. – MathSquared

0

PriorityQueue более уместен, если у вас есть численное значение, вычисленное и сохраненное как переменная внутри элемента элемента. В этом случае вам может потребоваться указать соответствующий компаратор . Для синхронного доступа перейдите к PriorityBlockingQueue

0

Если я правильно вас понимаю, вы читаете и вычисляете значение, помещаете его в очередь и только тогда вам нужна сортировка очереди ? Потому что, если вы сортируете свою очередь только один раз (после прочтения всех данных из файла), вы можете использовать LinkedList, который реализует Queue.

  • (я) Считывание данных и создания объектов (они должны реализовать CompareTo)
  • (б) поместить все объекты в LinkedList с linkedList.add(myObject)
  • (III) сортировать связанный список Collections.sort(linkedList)
  • (IV) заглянуть или поп первого элемента
Смежные вопросы