TreeSetに惑わされ。

TreeSetを使っていたが、なぜかうまーく値が保持されない。
なんでだろーと思ってAPIを見ていると、こんな記述が。


TreeSetから引用

セットが Set インタフェースを正しく実装する場合は、明示的なコンパレータの提供の有無にかかわらず、セットで管理される順序付けは「equals との一貫性」が必要です (「equals との一貫性」の正確な定義については、Comparable または Comparator を参照)。これは Set インタフェースが equals オペレーションに基づいて定義されるためですが、TreeSet のインスタンスはその compareTo メソッドまたは compare メソッドを使ってすべてのキー比較を実行するので、このメソッドによって等しいと見なされる 2 つのキーはセットから見ても等価です。

まぁつまりは、値を入れる際にcompareToで、同じかどうかを判定しているわけで。
んで、TreeSetに入れていたオブジェクトのcompareToメソッドはこんなんなってた。


public int compareTo(Object o) {
AAAVo vo = (AAAVo) o;
//いろいろと比較処理1
//いろいろと比較処理2
//いろいろと比較処理3






return 0;
}

いやアンタ、return 0;って(汗
がんばって処理を書いてるのに、それをムダにする気かいっ!




TreeSetって内部的にはTreeMapで書かれてるのね。