2013-02-10 5 views
1

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

http://pastebin.com/uKwAVz5L

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

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

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

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

Приветствие

ответ

1

Вот некоторая ценна на TreeMap деталь:

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

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

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

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

+0

Ehmm, им не совсем уверен, что это означает: S? – smilykoch

+0

Но какую часть кода вам нужно рассказать мне: p? – smilykoch

+0

Вот код, где я собрал карты .. я вроде знаю, что он не супер эффективен, но я не мог заставить его работать в каких-либо других идеях .. (приветствуются другие идеи оптимизации?) http: // pastebin ,com/AhpWZNg8 – smilykoch

0

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

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 
    } 
}