次の構造に基づいてネストされたツリーマップがあり、同じ構造で「2」から継続します。
ご覧のとおり、すでに「c13」サブアイテム(エピソード番号)で並べ替えられていますが、アプリケーションでツリーマップを使用すると、次のように表示されます。
http://i50.tinypic.com/15o9vno.png
それらはリモートでソートされていません..しかし、なぜかわかりませんか?:O
私のAndroidアプリで使用する場合も同じ問題です。
乾杯
次の構造に基づいてネストされたツリーマップがあり、同じ構造で「2」から継続します。
ご覧のとおり、すでに「c13」サブアイテム(エピソード番号)で並べ替えられていますが、アプリケーションでツリーマップを使用すると、次のように表示されます。
http://i50.tinypic.com/15o9vno.png
それらはリモートでソートされていません..しかし、なぜかわかりませんか?:O
私のAndroidアプリで使用する場合も同じ問題です。
乾杯
TreeMapに関するいくつかの貴重な情報は次のとおりです。
SortedMapインターフェースの赤黒木ベースの実装。このクラスは、使用されるコンストラクターに応じて、マップがキーの昇順で、キーのクラスの自然な順序(Comparableを参照)に従って、または作成時に提供されるコンパレーターによってソートされることを保証します。
このソートされたマップがMapインターフェースを正しく実装するためには、ソートされたマップによって維持される順序(明示的なコンパレーターが提供されているかどうかに関係なく)がequalsと一致している必要があることに注意してください。(equalsとの整合性の正確な定義については、ComparableまたはComparatorを参照してください。)これは、Mapインターフェイスがequals操作で定義されているためですが、マップはcompareTo(またはcompare)メソッドを使用してすべてのキー比較を実行するため、2つのキーがあります。この方法で等しいと見なされるものは、ソートされたマップの観点からは等しいです。ソートされたマップの動作は、その順序がequalsと矛盾している場合でも明確に定義されています。Mapインターフェースの一般的な契約に従わないだけです。
上記の方法を正しく実装しましたか?
コレクションフレームワークのさまざまな実装もあります(概要はこちら)。TreeMapが必要な機能を提供しない場合は、別の機能を実装して、必要に応じて変更できます。
コンパレータを使用してみてください。
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
}
}