为什么 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