为什么 compareTo 不比较这些 Character 值?
Why does compareTo not compare these Character values?
我正在尝试在 Java 中实现插入排序,以便在实现 Timsort 之前充分理解它。我正在使用通用 ArrayLists 来处理列表。我的实现似乎适用于任何一组 Integer 对象,但是当我使用 Character 对象时,compareTo() 部分无法比较它们?我在另一个没有字符问题的排序算法中使用了类似的比较。想不出是什么原因造成的。
排序算法如下:
public static <T extends Comparable> ArrayList<T> InsertionSort(ArrayList<T> inputArray) {
for (int i = 1; i < inputArray.size(); i++) {
T temp = inputArray.get(i);
int j = i - 1;
while (j >= 0 && inputArray.get(j).compareTo(temp) == 1) {
inputArray.set(j + 1, inputArray.get(j));
j--;
}
inputArray.set(j + 1, temp);
}
return inputArray;
}
对于输入 [5, 7, 2, 78, 4, 8, 89, 32, 9, 45, 67, 66, 72, 100, 99, 3]
我得到 [2, 3, 4, 5, 7, 8, 9, 32, 45, 66, 67, 72, 78, 89, 99, 100]
但是对于输入 [f, r, e, b, i, y, d, t, m]
我得到 [f, r, e, b, i, y, d, t, m]
.
如有任何帮助,我们将不胜感激。
这是问题所在:
inputArray.get(j).compareTo(temp) == 1
您假设如果第一个参数“大于”第二个参数,Comparable.compareTo
将 return 正好为 1。相反,documentation 只讨论结果的 符号 :
Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
所以你的支票应该是 > 0
而不是 == 1
。
我正在尝试在 Java 中实现插入排序,以便在实现 Timsort 之前充分理解它。我正在使用通用 ArrayLists 来处理列表。我的实现似乎适用于任何一组 Integer 对象,但是当我使用 Character 对象时,compareTo() 部分无法比较它们?我在另一个没有字符问题的排序算法中使用了类似的比较。想不出是什么原因造成的。
排序算法如下:
public static <T extends Comparable> ArrayList<T> InsertionSort(ArrayList<T> inputArray) {
for (int i = 1; i < inputArray.size(); i++) {
T temp = inputArray.get(i);
int j = i - 1;
while (j >= 0 && inputArray.get(j).compareTo(temp) == 1) {
inputArray.set(j + 1, inputArray.get(j));
j--;
}
inputArray.set(j + 1, temp);
}
return inputArray;
}
对于输入 [5, 7, 2, 78, 4, 8, 89, 32, 9, 45, 67, 66, 72, 100, 99, 3]
我得到 [2, 3, 4, 5, 7, 8, 9, 32, 45, 66, 67, 72, 78, 89, 99, 100]
但是对于输入 [f, r, e, b, i, y, d, t, m]
我得到 [f, r, e, b, i, y, d, t, m]
.
如有任何帮助,我们将不胜感激。
这是问题所在:
inputArray.get(j).compareTo(temp) == 1
您假设如果第一个参数“大于”第二个参数,Comparable.compareTo
将 return 正好为 1。相反,documentation 只讨论结果的 符号 :
Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
所以你的支票应该是 > 0
而不是 == 1
。