Встроенный итератор для PriorityQueue Java не пересекает структуру данных ни в каком конкретном порядке. Почему?

Это является прямым из Документов Java:

Этот класс и его итератор реализуют все дополнительные методы интерфейсов Набора и Итератора. Итератор, обеспеченный в итераторе метода (), как гарантируют, не пересечет элементы приоритетной очереди ни в каком конкретном порядке. Если Вы нуждаетесь в заказанном обходе, рассматриваете использование Arrays.sort (pq.toArray ()).

Так в основном мой PriorityQueue хорошо работает, но распечатывание его на экран с помощью его собственного, созданного в toString (), метод заставил меня видеть эту аномалию в действии и задавался вопросом, мог ли кто-то объяснить отчего получается, что обеспеченный итератор (и используемый внутренне) не пересекает PriorityQueue в своем естественном порядке?

11
задан Seth Hoenig 17 February 2010 в 00:18
поделиться

4 ответа

Пробовали ли вы HTML:: FormatRTF ? Я не использовал вывод RTF, но я использовал вывод обычного текста ( HTML:: FormatText ) и был им доволен.

-121--4378624-

jQuery может декодировать последовательности JSON с помощью jQuery.parseJSON () .

Для кодирования, однако, я знаю только о плагине: jquery-json

-121--855671-

Потому что базовая структура данных не поддерживает его. Двоичная куча упорядочена лишь частично, с наименьшим элементом в корне. При удалении этого элемента кучи переупорядочиваются таким образом, что следующий наименьший элемент находится в корне. Не существует эффективного упорядоченного алгоритма обхода, поэтому в Java его нет.

28
ответ дан 3 December 2019 в 02:40
поделиться

На первый взгляд, вероятно, он просматривает данные в том порядке, в котором они хранятся. Чтобы свести к минимуму время вставки элемента в очередь, обычно не все элементы хранятся в отсортированном порядке.

1
ответ дан 3 December 2019 в 02:40
поделиться

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

Во-вторых, неразумно привязываться к конкретной реализации (принудительная сортировка). С текущей реализацией вы можете просматривать ее в любом порядке и использовать любую реализацию.

0
ответ дан 3 December 2019 в 02:40
поделиться

Это будет звучать безумно, так как вы спрашиваете о «серьезных» вещах, таких как C++ и C (и «core linux API»), но вы можете подумать о строительстве в чем-то другом. Например:

  • Java Swing (многие любят его! Другие ненавидят его и называют устаревшим)
  • Mono GTK # (C # или StartBasic или все, что вы хотите, многие говорят, что это довольно круто, но они не так много людей)
  • Adobe AIR (ActionScript, вы можете его ненавидеть)
  • Титан (совершенно новый и недоказанный, но получающий много шума в мире iPhone, по крайней мере)

И многие другие возможности, некоторые из которых позволяют работать на нескольких платформах одновременно.

Извините, если этот ответ совсем не тот, что вы ищете. «Реальными» ответами в Linux являются «выбор инструментария», что также вообще не является ответом:)

-121--4166985-

Я думаю, что это то, что вы ищете. Kigg - общедоступное приложение ASP.NET MVC, которое было бы хорошей отправной точкой для того, что вы хотите. Вот url: http://www.codeplex.com/Kigg

Вы также можете найти сайт, который использует это здесь: http://dotnetshoutout.com/

По крайней мере, вы узнаете ASP.NET MVC рамки который является фантастическим.

-121--4407373-

Двоичные кучи являются эффективным способом реализации очередей приоритетов. Единственная гарантия относительно порядка, который делает куча, это то, что предмет в верхней части имеет наивысший приоритет (может быть, это «самый большой» или «самый маленький» в соответствии с некоторым порядком). Куча - это двоичное дерево, которое имеет следующие свойства: Свойство Shape: дерево заполняется сверху вниз слева направо Свойство порядка: элемент на любом узле больше (или меньше, если наименьший имеет наивысший приоритет), чем два его дочерних узла. Когда итератор посещает все элементы, он, вероятно, делает это в порядке прохождения уровня, т.е. посещает каждый узел на каждом уровне по очереди, прежде чем перейти к следующему уровню. Поскольку единственной гарантией относительно порядка является то, что узел имеет более высокий приоритет, чем его дочерние узлы, узлы на каждом уровне не будут находиться в определенном порядке.

0
ответ дан 3 December 2019 в 02:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: