簡體   English   中英

使用Comparator在Integer.MIN_VALUE,Integer.MAX_VALUE值之間使用Arrays.sort

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM