我有一組名稱(a)和依賴項(b)的對象。我想以某種方式排列所有先前的依賴關係。所以我有這樣的代碼:TreeSet具有可比性,按遞歸依賴關係排序
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
public class Foo {
static class TestOrder implements Comparable<TestOrder> {
private final String a;
private final Set<String> b;
public TestOrder(String a, Set<String> b) {
this.a = a;
this.b = b;
}
public int compareTo(TestOrder o) {
if (o.b.contains(a))
return -1;
else
return 1;
}
@Override
public int hashCode() {
return a.hashCode();
}
@Override
public boolean equals(Object obj) {
return a.equals(obj);
}
public String toString() {
return a + " - " + b.toString();
}
}
public static void main(String[] args) {
Set<TestOrder> tos = new TreeSet<>();
tos.add(new Foo.TestOrder("a", new HashSet<String>() {{
add("b");
add("c");
}}));
tos.add(new Foo.TestOrder("e", new HashSet<String>() {{
add("a");
}}));
tos.add(new Foo.TestOrder("b", new HashSet<String>() {{
add("d");
add("c");
}}));
tos.add(new Foo.TestOrder("c", new HashSet<String>() {{ }}));
tos.add(new Foo.TestOrder("d", new HashSet<String>() {{ }}));
for (TestOrder to : tos) {
System.out.println(to.toString());
}
}
}
導致:
c - []
b - [d, c]
a - [b, c]
e - [a]
d - []
但是 - 由於B取決於d - 預期的結果將是:
c - []
d - []
b - [d, c]
a - [b, c]
e - [a]
我缺少什麼?
非常酷,非常感謝! – KIC 2013-04-21 12:12:22
@KIC這不能解決問題,只會使問題更難找到。以這種順序添加這些依賴關係,看看爲什麼:'a- [b]','c- [d]','b- [c]','d - []'。它應該產生'd- [],c- [d],b- [c],a- [b]',但是產生完全不同的輸出([link](http://ideone.com/WKsLJQ) )。 – dasblinkenlight 2013-04-21 12:20:09
@dasblinkenlight是的,你是對的...最後,我不得不實施一個簡單的拓撲排序算法...抱歉Michael Besteck我不得不改變正確的答案標籤... – KIC 2013-04-21 13:55:52