【发布时间】:2018-10-16 15:27:56
【问题描述】:
我正在尝试将 ArrayList 的合并排序算法作为参数实现。据我所知,除了合并方法中的 if 语句外,代码工作正常。我收到二元运算符“
我现在可以按姓氏正确排序。现在我想知道我需要更改什么才能按名字甚至 ID 号排序。如果我能得到一些关于如何解决这个问题的指导,我将不胜感激。
private static void sortListByID (List<Person> theList) {
if (theList.size() >= 2) {
List<Person> left = new ArrayList<>();
left.addAll(theList.subList(0, theList.size()/2));
List<Person> right = new ArrayList<>();
right.addAll(theList.subList(theList.size()/2, theList.size()));
sortListByID(left);
sortListByID(right);
merge(theList, left, right);
}
}
private static void merge(List<Person> result, List<Person> left,
List<Person> right) {
int i1 = 0;
int i2 = 0;
for (int i = 0; i < result.size(); i++) {
if (i2 >= right.size() || (i1 < left.size() &&
left.get(i1).compareTo(right.get(i2)) < 0)) {
result.set(i, left.get(i1));
i1++;
} else {
result.set(i, right.get(i2));
i2++;
}
}
}
【问题讨论】:
-
left.get(i1) <= right.get(i2)只能使用 -
只是指出,我认为
Collections.sort()是一个稳定的合并排序。 -
left.get(i1)和right.get(i2)返回一个类型为Person的对象,不能使用 'Comparable,这将允许您比较两个对象。 -
谢谢!这完全有道理,我忘了它是一个对象,而不是原始类型。
标签: java sorting arraylist merge compiler-errors