compareTo()中的整数

时间:2018-03-13 22:26:23

标签: java collections comparable

是否可以将compareTo()方法中的Integers与Collections.sort()进行比较,因为当我运行以下代码时,它将无法编译;编译器说这个有一个错误,因为它将这个与另一个整数进行比较。我试图按降序对数字进行排序。

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;
  }
}

4 个答案:

答案 0 :(得分:1)

thismain的一个实例,您无法将<>运算符应用于该实例。坦率地说,你不需要。只需使用Integer的自然顺序并尊敬它:

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

答案 1 :(得分:1)

制作自己的Comparable<Integer>不会更改Integer的默认排序。 Integer是最终的,所以你不能对它进行分类。您可以撰写Comparator<Integer>并使用它。 ,您可以简单地获取reverseOrder() Comparator。像,

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

Collections.sort(list, (a, b) -> Integer.compare(b, a));

答案 2 :(得分:0)

02:30:00

答案 3 :(得分:0)

使用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;
//                }
            }
        }
    }
}