我有一个带有int with字段的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;
}
}
现在我要测试我的课程
首先:我用整数创建了数组。
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 我能做些什么更好的选择?
答案 0 :(得分:3)
您只需在比较器中使用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