【发布时间】:2013-09-22 21:29:18
【问题描述】:
我有一个实现Comparable 的Point 类。
我想做Point f = arr[first];
现在,我读到使用原始类型 Comparable 等是不好的。
那么,如果我将arr[] 设为Comparable<Point>[] 而不是Comparable[],我会做错什么?
这是偷来的代码,我喜欢它,我偷了它。
private static void sort(Comparable[] a, Point compPoint, int lo, int hi) {
if (hi <= lo)
return;
int lt = lo;
int gt = hi;
int i = lo;
int count = 0;
Comparator comp = compPoint.SLOPE_ORDER;
Comparable v = a[lo];
ArrayList<Point> line = new ArrayList<Point>();
line.add(compPoint);
while (i <= gt) {
int cmp = comp.compare(a[i], v);
if (cmp < 0)
exch(a, lt++, i++);
else if (cmp > 0)
exch(a, i, gt--);
else {
count++;
line.add((Point) a[i]);
i++;
}
}
if (count >= 3) {
Collections.sort(line, new Comparator<Point>() {
public int compare(Point v, Point w) {
return v.compareTo(w);
}
});
for (int j = 0; j < line.size(); j++) {
if (j == line.size() - 1)
StdOut.println(line.get(j).toString());
else
StdOut.print(line.get(j).toString()
+ " -> ");
}
line.get(0).drawTo(line.get(line.size() - 1));
}
sort(a, compPoint, lo, lt - 1);
sort(a, compPoint, gt + 1, hi);
}
private static void exch(Comparable[] a, int v, int w) {
Comparable tmp = a[v];
a[v] = a[w];
a[w] = tmp;
}
我想知道是否有比使用原始类型 Comparable 更好的方法。
【问题讨论】:
-
为什么不能写
Comparator? -
你为什么不把它变成
Point[]类型? -
"stolen" 听起来太错误了:/ 至少提供一些学分...
-
我编辑了一些代码,如果你们能看到的话,会很感激你们。 @A4L:好吧,我未经许可就拿走了,谁知道呢,作者可能看到了这篇文章,然后像 %$#%$#!