私は一意のデータのセットを持っています。 XとZにBCDおよびEにdomainA.org
に関連するデータとdoimanY.org
をコピーするために並べ替え特定のオブジェクトのみが同等である場合に設定します
0: domainA.org -> domainB.org
1: domainY.org -> domainZ.org
2: domainB.org -> domainC.org
3: domainD.org -> domainE.org
4: domainX.org -> domainY.org
5: domainC.org -> domainD.org
、私は次の順序でこのセットを反復処理する必要があります:それは次のようになりましょう
0: domainA.org -> domainB.org
2: domainB.org -> domainC.org
5: domainC.org -> domainD.org
3: domainD.org -> domainE.org
4: domainX.org -> domainY.org
1: domainY.org -> domainZ.org
X -> Y -> Z
がA -> B -> C -> D -> E
より前に処理されるかどうかは関係ありません。
それぞれの「カテゴリ」を並べ替える。独立したデータはすべて独自のものです。 sourceDomain -> destinationDomain
のラッパーオブジェクトをComparableを実装し、ソートセットを使ってソートを行いました。 ここに問題があります。
これは以下のように私のcomparteToの実装が見えるものです:彼らは最終リストに隣接している場合にのみ、2つのオブジェクトを比較することである
if (source.equals(other.destination)) {
return 1;
} else if (destination.equals(other.source)) {
return -1;
}
return 0;
はそれと同じように「お菓子」他のオブジェクトをotherwhise。
(たとえcompareToが何らかの点で0を返した場合、TreeSet自体に項目を追加していないことは言うまでもありません) これは、例1で示したデータを正しくソートしていないためです。
私のアイデアは、ソースセットを反復して、他のすべてのエントリに対してエントリを比較し、並べ替えが完了したら一緒に参加できる別々のセットを作成することです。
これの複雑さは少なくともn^2になりますが、これはかなり悪いことです。
私の質問:私たちはそれ以上のことはできますか?
何についてソースが等しくない他のデスティネーションも宛先が等しくない他のソース?この場合、メソッドは0を返します –
正しいです、これは問題です...これらの2つのオブジェクトが互いにどのように関連しているかを判断する方法はありません – RoiEX