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;
}
}
this
是 main
的实例,您不能对其应用 <
或 >
运算符。坦率地说,你不需要。只需使用 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;
// }
}
}
}
}
是否可以在 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;
}
}
this
是 main
的实例,您不能对其应用 <
或 >
运算符。坦率地说,你不需要。只需使用 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;
// }
}
}
}
}