9

オブジェクトが可変の場合、TreeSet、HashSet、または LinkedHashSet はどのように動作しますか? それらが何らかの意味で機能するとは想像できませんか?

オブジェクトを追加した後に変更した場合。リストの動作は何ですか?

リンクされたリストまたは配列以外の変更可能なオブジェクトのコレクション(ソート/インデックス/などに必要)を処理し、それらを毎回単純に反復処理するためのより良いオプションはありますか?

4

3 に答える 3

4

インターフェイスはこのSet問題に直接対処します。はセット内の要素です。この禁止事項の特殊なケースは、セットがそれ自体を要素として含むことが許可されないことです。」

補遺:

可変オブジェクトのコレクションを処理するためのより良いオプションはありますか?

どのコレクションの実装が最も適しているかを判断しようとするときは、コア コレクション インターフェイスを調べる価値があるかもしれません。特に実装では、とが正しく実装さSetれている限り、関連のない属性は変更可能です。データベースのリレーションと同様に、属性は変更される可能性がありますが、主キーは違反されていない必要があります。equals()hashCode()

于 2010-08-29T06:42:13.030 に答える
2

変更可能であることは、オブジェクトの hashCode と比較メソッドの動作が挿入後に変更された場合にのみ、コレクションの問題になります。

これを処理する方法は、コレクションからオブジェクトを削除し、そのような変更後にそれらを再度追加して、オブジェクトが.

本質的に、これはコレクションの観点から不変オブジェクトになります。

パフォーマンスの低い別の方法は、すべてのオブジェクトを含むセットを保持し、セットをソートまたはインデックス付けする必要がある場合に TreeSet/HashSet を作成することです。これは、オブジェクトが絶えず変化し、同時にマップへのアクセスが必要な状況では、現実的な解決策ではありません。

于 2010-08-29T06:39:33.833 に答える
0

この状況に対処する「最善の」方法は、検索用の補助データ構造を保持することです。これは、データベースのインデックスに少し似ています。次に、すべての変更で、インデックスが更新されていることを確認する必要があります。良い例は、マップまたはマルチマップです。更新前にインデックスからエントリを削除し、更新後に新しい値でそれらを再度追加します。明らかに、これには並行性などの注意が必要です。

于 2010-08-29T10:19:25.717 に答える