gpt4 book ai didi

java - 在 Integer.MIN_VALUE、Integer.MAX_VALUE 值之间使用 Arrays.sort 和比较器

转载 作者:行者123 更新时间:2023-12-01 19:39:09 25 4
gpt4 key购买 nike

我有一个带有 int 和字段的 Java 类,而这个问题不需要其他字段。

class MyInteger {

int integer;

public MyInteger(int integer) {
this.integer = integer;
}

public int getInteger() {
return integer;
}

public void setInteger(int integer) {
this.integer = integer;
}

}

现在我测试我的类(class)

首先:我用整数创建了数组。

int size = 12;
MyInteger[] integers = new MyInteger[size];
for (int p = 0; p < size; p++) {
integers[p] = new MyInteger(
java.util.concurrent.ThreadLocalRandom.current().nextInt(
Integer.MIN_VALUE, Integer.MAX_VALUE)
);
}

现在打印它。

System.out.println("UNSORTED");
for (int p = 0; p < size; p++) {
int length = String.valueOf(integers[p].getInteger()).length();
String stringValue = new String(new char[12 - length]).replace("\0", " ") + integers[p].getInteger();
System.out.println("p:" + p + " -> " + stringValue);
}

在这里,我正在尝试对其进行排序。

Arrays.sort(integers, new Comparator<MyInteger>() {
@Override
public int compare(MyInteger myInteger1, MyInteger myInteger2) {
return myInteger2.getInteger() - myInteger1.getInteger();
}
});

再次打印

System.out.println("DESCENDING");
for (int p = 0; p < size; p++) {
int length = String.valueOf(integers[p].getInteger()).length();
String stringValue = new String(new char[12 - length]).replace("\0", " ") + integers[p].getInteger();
System.out.println("p:" + p + " -> " + stringValue);
}

现在我的输出...

    UNSORTED
p:0 -> 1516262435
p:1 -> -1895913122
p:2 -> 460516193
p:3 -> 2056891047
p:4 -> 1556892429
p:5 -> 609045519
p:6 -> -1105298052
p:7 -> 1015464430
p:8 -> -232510140
p:9 -> 28575513
DESCENDING
p:0 -> -1105298052
p:1 -> -1895913122
p:2 -> 2056891047
p:3 -> 1556892429
p:4 -> 1516262435
p:5 -> 1015464430
p:6 -> 609045519
p:7 -> 460516193
p:8 -> 28575513
p:9 -> -232510140

我知道,因为有时 (int2 - int1) 的容量(以位为单位)大于简单 int我更好的选择是什么?

最佳答案

您可以使用 Integer.compare()在您的比较器中实现此目的:

Arrays.sort(integers, (i1, i2) -> Integer.compare(i2.getInteger(), i1.getInteger()));

或者使用 Comparator.comparingInt() 甚至更短:

Arrays.sort(integers, Comparator.comparingInt(MyInteger::getInteger).reversed());

两种情况的结果应如下所示:

DESCENDING
p:0 -> 2023840480
p:1 -> 1411652946
p:2 -> 1329894719
p:3 -> 1158939955
p:4 -> 652971815
p:5 -> -118538025
p:6 -> -157722835
p:7 -> -1370854542
p:8 -> -1925460195
p:9 -> -1937778542

关于java - 在 Integer.MIN_VALUE、Integer.MAX_VALUE 值之间使用 Arrays.sort 和比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55986997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com