我正在寫一堆(Max-Heap,意思是max元素是root)類,它可用於「heapify」給定的一組對象。 我知道這個堆的一般結構以及各種算法。 現在對於一般對象,沒有定義比較。所以我需要定義兩個對象之間的比較。 我的問題是,如果這個比較函數應該在類堆中或在類Object中定義?如果我在Heap類中定義它,那麼對於我使用的每個數據結構,我需要重寫比較函數,這是無效的。這是因爲如果我稍微改變對象,我可能會最終在大量的地方改變比較。 那麼這件事情是如何處理的? 謝謝。堆爲一般對象
class Object{
int value;
Object (int a) {
value=a;
}
boolean isLessThan(Object a, Object b){
if (a.value<=b.value){
return true;
}
else return false;
}
}
class Heap{
Object [] heap=new Object[1000];
int size=0;
Heap() {
}
void HeapifyDownwards (int index){
int left_child=2*index+1;
int right_child=2*index+2;
if (size>right_child){
// both right and left child exist
Object right= heap[right_child];
Object left= heap[left_child];
Object node = heap[index];
if ((isLessThanEqualTo(right,node)) && (isLessThanEqualTo(left,node))){
return;
}
}
else if (size==right_child){
//only left child exists
}
else {
// no child exists
}
}
}
我花了五分鐘實現,該'Object'你說的是不是'java.lang.Object'。我投票重命名你的類;) –
如果你想比較類的實例,那麼你應該實現「可比」,而不是定義和實現你自己的方法。它很快就會收益。 –
我剛剛得到類Object以獲得比較結果。 我基本上是想問,如果我使用一般的「對象」 實現堆,那麼我該如何使用比較? –