Сортировка древовидной карты не работает

У меня есть вложенная древовидная карта, основанная на следующей структуре, а затем она продолжается с «2»: { с той же структурой.

http://pastebin.com/uKwAVz5L

И, как вы можете видеть, он уже отсортирован по подэлементу "c13" (номер эпизода).. но когда я использую карту дерева в своих приложениях, она выглядит так:

http://i50.tinypic.com/15o9vno.png

Они даже не отсортированы удаленно... но я не понимаю, почему? :О

Такая же проблема при использовании его в моем приложении для Android.

Ваше здоровье


person smilykoch    schedule 10.02.2013    source источник


Ответы (2)


Вот некоторая ценная информация о TreeMap. :

Реализация интерфейса SortedMap на основе красно-черного дерева. Этот класс гарантирует, что карта будет находиться в порядке возрастания ключа, отсортированного в соответствии с естественным порядком для класса ключа (см. Comparable) или с помощью компаратора, предоставленного во время создания, в зависимости от того, какой конструктор используется .

Обратите внимание, что порядок, поддерживаемый отсортированной картой (независимо от того, предоставлен явный компаратор или нет), должен соответствовать равенству, если эта отсортированная карта должна правильно реализовать интерфейс карты. (См. Comparable или Comparator для точного определения соответствия с равными.) Это так, потому что интерфейс Map определен в терминах операции equals, но карта выполняет все ключевые сравнения, используя свой метод compareTo (или сравнение)< /strong>, так что два ключа, которые считаются равными с помощью этого метода, равны с точки зрения отсортированной карты. Поведение отсортированной карты четко определено, даже если ее порядок несовместим с равными; он просто не подчиняется общему контракту интерфейса карты.

Правильно ли вы реализовали методы, упомянутые выше?

Существуют также различные реализации платформы Collections. (Обзор находится здесь). Если TreeMap не предоставляет нужных вам функций, вы можете реализовать другой и изменить его в соответствии со своими потребностями.

person Tobrun    schedule 10.02.2013
comment
Эмм, я не совсем уверен, что это значит :s? - person smilykoch; 10.02.2013
comment
Вот код, в котором я собрал карты. Я знаю, что он не очень эффективен, но я не смог заставить его работать в каких-либо других идеях.. (Другие идеи по оптимизации приветствуются?) pastebin.com/AhpWZNg8 - person smilykoch; 10.02.2013
comment
Я выделил некоторые важные части и добавил несколько ссылок, содержащих всю информацию, необходимую для работы с коллекциями. Я считаю, что это предложение говорит само за себя: Поведение отсортированной карты четко определено, даже если ее порядок несовместим с равными; он просто не подчиняется общему контракту интерфейса Карты - person Tobrun; 10.02.2013

Попробуйте использовать компаратор:

TreeMap map = new TreeMap<Obj1, Obj2>(new ObjComparator());

private class ObjComparator() implements Comparator<Obj1> {
    public int compareTo(Obj1 o1, Obj1 o2) {
        return o1.compareTo(o2); // do your logic here
    }
}
person Enrichman    schedule 10.02.2013