java - 使用 Comparator 和 Arrays.asList() 进行排序

标签 java arrays collections comparator

当我执行下面的代码时,我得到的输出为[0, -2000000000, 2000000000]

import java.util.Arrays;
import java.util.Comparator;

public class SordidSort {
public static void main(String args[]) {
    Integer big = new Integer(2000000000);
    Integer small = new Integer(-2000000000);
    Integer zero = new Integer(0);
    Integer[] arr = new Integer[] { big, small, zero };
    Arrays.sort(arr, new Comparator<Object>() {
        public int compare(Object o1, Object o2) {
            return ((Integer) o2).intValue() - ((Integer) o1).intValue();
        }
    });
    System.out.println(Arrays.asList(arr));
    }
}

它如何对数字进行排序?

最佳答案

而不是

public int compare(Object o1, Object o2) {
    return ((Integer) o2).intValue() - ((Integer) o1).intValue();
}

使用以下内容

public int compare(Object o1, Object o2) {
    int x1 = ((Integer) o1).intValue();
    int x2 = ((Integer) o2).intValue();
    if (x1 < x2) {
        return -1;
    } else if (x1 == x2) {
        return 0;
    } else {
        return 1;
    }
}

您的代码可能会产生溢出。当产生溢出时,您会得到奇怪的顺序。

关于java - 使用 Comparator 和 Arrays.asList() 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31472174/

相关文章:

java - Java 中的奇数数学错误

java - 不可变数组的近似中位数

c - 指针数组的动态内存分配

arrays - 将 Array[String] 的 Spark 列拆分为 String 列

java - 如何在 Java 中使用 lambda 表达式搜索集合?

java - 有没有办法让 Guice Grapher 工作?

java - 在java中,如何将String转换为Date对象 "yyyy-MM-dd' T'HH :mm"

java - 任何人都可以向我解释这个 Java 问题吗?

java - 如何在 JTable 中维护用户指定的列宽?

java - 使用类似的界面对列表进行排序