compareTo() 中的整数

Integer in compareTo()

是否可以在 compareTo() 方法中与 Collections.sort() 一起比较整数,因为当我 运行 以下代码时,它不会编译;编译器说 this 有一个错误,因为它将 this 与另一个整数进行比较。 我正在尝试对数字进行排序按降序排列。

import java.util.*;

public class main implements Comparable <Integer> {
  public static void main(String [] args) {
    ArrayList <Integer> list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    list.add(5);
    list.add(4);
    Collections.sort(list);
    System.out.println(list);
  }


  public int compareTo(Integer other) {
    if (this > other){
      return -1;
    }

    if (this < other){
      return 1;
    }

    return 0;
  }
}

thismain 的实例,您不能对其应用 <> 运算符。坦率地说,你不需要。只需使用 Integer 的自然顺序并尊重它:

list.sort(Comparator.<Integer>naturalOrder().reversed());

制作您自己的 Comparable<Integer> 不会更改 Integer 的默认顺序。 Integer 是最终的,所以你不能 sub-class 它。您 可以 编写 Comparator<Integer> 并使用它。 ,您可以简单地得到reverseOrder()Comparator。喜欢,

Collections.sort(list, Comparator.reverseOrder());

Collections.sort(list, (a, b) -> Integer.compare(b, a));
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @Author Jack <J@ck>
 * 
 */
public class ListReverse {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 3, 4);

        // Creates new list wit reverse order
        List<Integer> reverseList = list.stream()
                .sorted(Comparator.reverseOrder())
                .collect(Collectors.toList());
        System.out.println(reverseList);
    }
}

最好使用 Collections.sort(list, c)ArrayList

进行排序

如果你想自己做,这里有一个例子bubble-sort

import java.util.ArrayList;

public class Main {

    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(5);
        list.add(4);
        Main.bubble(list);
        System.out.println(list);
    }

    private static void swap(ArrayList<Integer> list, int x, int y) {
        Integer temp = list.get(x);
        list.set(x, list.get(y));
        list.set(y, temp);
    }

    public static void bubble(ArrayList<Integer> list) {
        boolean done = false;

        while (!done) {
            done = true;
            for (int i = 0; i + 1 < list.size(); i++) {

                /* Sort */
                if (list.get(i) > list.get(i + 1)) {
                    swap(list, i, i + 1);
                    done = false;
                }

//                /* Sort - in reverse order */
//                if (list.get(i) < list.get(i + 1)) {
//                    swap(list, i, i + 1);
//                    done = false;
//                }
            }
        }
    }
}