【发布时间】:2014-01-27 17:31:45
【问题描述】:
我正在编写一种适用于二进制文件的排序方法。 (所有动作都在文件内完成,无需将整个文件读入内存)。
我得到一个: “Comparator 类型中的方法 compare(E, E) 不适用于参数 (so, so)” 来自 qsort 方法。
你知道为什么吗?
谢谢!!
代码:
class so {
// Some object
}
class compareByIntValue implements Comparator<so> {
public int compare(so o1, so o2) {
// Comparing
}
}
class StructureOnFile {
public static void main(String[] args) throws IOException {
RandomAccessFile objectsOnFile = new RandomAccessFile(FILENAME, "rw");
fillWithObjects(objectsOnFile);
quickSort(objectsOnFile, RecordSize, new compareByIntValue());
.
.
.
}
static <E> void quickSort(RandomAccessFile raf,
int RecordSize, Comparator<E> c) throws IOException {
quickSort(raf, RecordSize, c, 0, (int) (raf.length() - RecordSize));
}
static <E> void quickSort(RandomAccessFile raf,
int RecordSize, Comparator<E> c, int first, int last) {
if (last > first) {
int pivotIndex = partition(raf, RecordSize, first, last, c);
quickSort(raf, RecordSize, c, first, pivotIndex - RecordSize);
quickSort(raf, RecordSize, c, pivotIndex + RecordSize, last);
}
}
static <E> int partition(RandomAccessFile list,
int RecordSize, int first, int last, Comparator<E> c) {
so pivot = new so();
so tmp = new so();
list.seek(first);
pivot.readFromFile(list); // Reads first element into pivot
int low = first + RecordSize; // Index for forward search
int high = last; // Index for backward search
while (high > low) {
// Search forward from left
list.seek(low);
tmp.readFromFile(list);
HERE =================> while (low <= high && c.compare(tmp, pivot) <= 0 )
low+=RecordSize;**
【问题讨论】:
标签: java generics comparator qsort