3

TreeBasedTableGuava (Google コレクション)のオブジェクトがあります。の形をしていTreeBasedTable<k1, k2, v>ます。k1k2実装しComparableます。テーブルを表示するときに、ユーザーがさまざまな方法で並べ替えて値の順序を変更できるようにしたいと考えています。

私が試みたアプローチは、テーブルを反復処理し、値ごとに、Compare メソッドで使用される変数を変更することでした。問題は、ループを一度通過してから a を返すことNullPointerExceptionです。これは、繰り返しながら順序を変更しようとすることに絞り込まれたと思います(新人の間違い、私は知っています)。

だから私は、このテーブルを並べ替える良い方法は何だろうと思っていました.

4

3 に答える 3

3

TreeBasedTableを再作成し、それに別のコンパレータを提供する必要があります。グアバのドキュメントをご覧ください。また、これは内部的に適切なコンパレータでソートする必要のあるツリーを使用することに注意してください(ツリーを構築するとき、コンパレータは既知であるため、ツリーは特定の方法で構築されます)。他のコンパレータを提供すると、新しいツリーが構築されます。これが望ましくない動作である場合は、他のデータ構造の使用を検討する必要があります。

于 2011-08-09T19:24:13.730 に答える
3

別のコンパレータ オブジェクトで作成された新しい TreeBasedTable を作成し、public putAll メソッドを介してオリジナルをそれにコピーするとどうなるでしょうか。各要素の配置には log(N) かかるため、合計時間は N log(n) になるはずです。これは、再ソートにかかると予想される時間とほぼ同じです。

于 2011-08-09T19:24:38.333 に答える
0

TreeBasedTable.create(TreeBasedTable<R, C, ? extends V>)フラグの 1 つを切り替えてコンパレータを変更した後、以前のものから新しいものを作成するために使用します。

于 2011-08-09T19:27:50.717 に答える