[英]BitSet is not working for Integer.MAX_VALUE and Integer.MIN_VALUE
[英]using Arrays.sort between Integer.MIN_VALUE, Integer.MAX_VALUE values with Comparator
我有這個帶有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更大, 那么我能做的更好選擇是什么?
您可以在Comparator中使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.