1. ホーム
  2. java

[解決済み] オブジェクトの値が変わってもTreeSetのソートを維持する

2023-06-06 11:01:32

質問

Comparable<>を使用して「自然なソート順」を定義するオブジェクトを持っています。 これらはTreeSetsに格納されています。

オブジェクトを削除して再追加する以外に、ソート順を定義するために使用されているメンバーが更新されたときにソートを更新する他の方法はありますか?

どのように解決するのですか?

他の人が指摘したように、内蔵の方法はありません。しかし、いつでもその TreeSet をサブクラス化し、お好みのコンストラクタを使用して、必要な機能を追加することができます。

public class UpdateableTreeSet<T extends Updateable> extends TreeSet<T> {

    // definition of updateable
    interface Updateable{ void update(Object value); }

    // constructors here
    ...

    // 'update' method; returns false if removal fails or duplicate after update
    public boolean update(T e, Object value) {
       if (remove(e)) {
           e.update(value);
           return add(e);
       } else { 
           return false;
       }
    }
}

これ以降は ((UpdateableTreeSet)mySet).update(anElement, aValue) を呼び出して、ソートの値やソート自体を更新します。このため、追加の update() メソッドを実装する必要があります。