假設我有此類:在TreeSet中交換密鑰?
public class Node implements Comparable<Node>{
public float key;
public TreeSet<Node> neighbors;
public Node{
//fill neighbors somehow
}
@Override
public int compareTo(Node n) {
if(this.key == n.key)
return 0;
else if(this.key > n.key)
return 1;
else
return -1;
}
}
所以這是一個曲線圖,其中每個節點被連接到一組節點(即它的鄰居)的一個典型的節點。我使用的是TreeSet
,因爲我經常(經常)以比他們的關鍵字大(小)的關鍵字來知道所有的鄰居。現在,讓我們假設我有這樣的方法:
//swap nodes keys
void swapKeys(Node a, Node b){
float ak = a.key;
a.key = b.key;
b.key = ak;
}
注意,此方法只改變了兩個節點的密鑰,僅此而已。
做這個「打破」的結構,或一切將繼續正常工作?
如果破壞了結構,你看這個簡單的解決方案:
//swap nodes keys
void swapKeys(Node a, Node b){
a.remove(b);
b.remove(a);
float ak = a.key;
a.key = b.key;
b.key = ak;
a.add(b);
b.add(a);
}
這將打破結構。密鑰應該是不可變的。一旦添加爲密鑰,哈希碼不能更改。 –
@PiotrGwiazda感謝您的回答。我剛剛發佈的解決方案呢? – justHelloWorld
@JonnyHenly當你發佈你的評論時編輯lol – justHelloWorld