Опции сортировки Java TreeMap?

Как ни странно, сегодня все работает без проблем, и как бы я ни пытался моделировать вчерашние проблемы, я не могу. Возможно, в облачном центре обработки данных возникли некоторые проблемы с сетевым взаимодействием - у нас также были некоторые тайм-ауты при подключении к другим базам данных.

Так что я действительно не знаю ответа, за исключением «ждать, пока процесс Уолсендера на мастер не умрет», - что, скорее всего, может зависеть от настроек tcp_keepalives_ *. Поэтому я рекомендую установить для них разумные значения в postgresql.conf, потому что значения по умолчанию в ОС обычно слишком велики.

На самом деле мы используем его в наших больших аналитических базах данных (установленных как на PostgreSQL, так и на ОС) из-за схожих проблем. Программы Golang и nodejs, время от времени вычисляющие статистику, не могли распознать, что сеанс базы данных заканчивался или прекращался в некоторых случаях, и зависали до тех пор, пока ОС не завершала соединение через 2 часа (по умолчанию в Debian). Все это, казалось, всегда было связано с проблемами сетевого взаимодействия. При правильной настройке tcp_keepalives_ * реакция в случае проблем гораздо быстрее.

После того, как старый процесс Walsender умирает на мастере, вы можете повторить все шаги, и он должен работать. Похоже, мне просто не повезло вчера ...

5
задан Doorknob 3 March 2013 в 04:28
поделиться

3 ответа

Вы не смогли бы сделать это с TreeMap, реализованным в библиотеке Collections. Вот реализация Красно-черного Дерева в Java, на который можно посмотреть все же. Проверьте printTree() методы, чтобы видеть, как они обходят дерево в отсортированном порядке.

/**
 * Print all items.
 */
public void printTree( ) {
    printTree( header.right );
}

/**
 * Internal method to print a subtree in sorted order.
 * @param t the node that roots the tree.
 */
private void printTree( RedBlackNode t ) {
    if( t != nullNode ) {
        printTree( t.left );
        System.out.println( t.element );
        printTree( t.right );
    }
}

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

6
ответ дан 13 December 2019 в 05:44
поделиться

AFAIK классы TreeSet/TreeMap на самом деле не выставляют ни одних из своих внутренностей и просто соответствуют интерфейсу Set/Map. Итератор, как только гарантируют, войдет в порядок по возрастанию.

Я немного озадачен относительно того, почему Вы хотели бы просканировать эти узлы в inorder, так как цель этих деревьев не состоит в том, чтобы представить отношения между объектами (например, математические формулы), а скорее только сохранить всех их и получить их эффективно.

3
ответ дан 13 December 2019 в 05:44
поделиться

Можно, по крайней мере, сделать обход inorder с помощью итератора и для каждого цикла:

void inOrderWalk(TreeMap<K,V> treeMap) {
   //this will loop through the values in the map in sorted order (inorder traversal)
   for (Map.Entry<K,V> entry : treeMap.entrySet() {
        V value = entry.getValue();
        K key = entry.getKey()
   }
}

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

3
ответ дан 13 December 2019 в 05:44
поделиться
Другие вопросы по тегам:

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