我有一個名爲DrawingObject的抽象類,它被四個子類擴展:Point,Line,FreeFormLine和Circle。 DrawingObject實現可比性,我已經定義了compareTo方法看起來像這樣比較不同的對象
public int compareTo(DrawingObject object)
{
if(object instanceof Point && this instanceof Point)
{
//determine which has a higher value
return 0;
}
else if(object instanceof Point && this instanceof Line)
return 1;
else if(object instanceof Point && this instanceof FreeFormLine)
return 1;
else if(object instanceof Point && this instanceof Circle)
return 1;
else if(object instanceof Line && this instanceof Point)
return -1;
else if(object instanceof Line && this instanceof Line)
{
//determine which has a higher value
return 0;
}
else if(object instanceof Line && this instanceof FreeFormLine)
return 1;
else if(object instanceof Line && this instanceof Circle)
return 1;
else if(object instanceof FreeFormLine && this instanceof Point)
return -1;
else if(object instanceof FreeFormLine && this instanceof Line)
return -1;
else if(object instanceof FreeFormLine && this instanceof FreeFormLine)
{
//determine which has a higher value
return 0;
}
else if(object instanceof FreeFormLine && this instanceof Circle)
return 1;
else if(object instanceof Circle && this instanceof Point)
return -1;
else if(object instanceof Circle && this instanceof Line)
return -1;
else if(object instanceof Circle && this instanceof FreeFormLine)
return -1;
else if(object instanceof Circle && this instanceof Circle)
{
//determine which has a higher value
return 0;
}
return 0;
}
現在,我有這個,我想用價值來擴展代碼排序。我很困惑如何去做這件事。例如Point有兩個實例字段,double x和double y。我很困惑要排序。我也困惑於其他類型的對象以及如何對它們進行排序。每個類都有一個equals方法,它在DrawingObject中聲明爲抽象,但在每個子類中實現。
以下是每個班級中的字段說明: Point有兩個雙字段,x和y。這些表示該點的笛卡爾座標網格上的座標。 線有兩個點字段,p1和p2。這些代表了該線的起點和終點。 FreeFormLine有一個ArrayList字段,分。這代表了沿線的所有點。 圓有一個點域,中心和一個雙半徑域。這些代表圓的中心點和半徑。
總之,當有多個字段需要評估時,如何確定哪個對象具有更多或更少的價值?
編輯: 做這種排序的目的是讓我能夠通過使用二進制搜索的DrawingObjects數組有效地進行搜索。
這是你必須回答的問題。它太寬泛 - 例如它可能基於線長(或圓半徑)或線的最左點(假設爲2D)。沒有普遍的答案。 – John3136
我意識到這一點。我更多的是尋求建議,而不是具體的答案。 – Jacob
「排列形狀列表」甚至意味着什麼?我們如何知道你爲什麼這樣做?沒有更多的信息,就不能給出明智的答案。 – John3136