0

有没有办法对不在数组中的整数进行排序?

我知道您可以将sort(arrayList)类型想法与数组一起使用,但是示例...

如果我有单独的变量,可以完成类似的任务吗?例如,如果我有三个数字,我可以对它们进行排序,以便它们从大到小打印吗?

谢谢!

4

1 回答 1

1

如果您的 ArrayList 包含对象,则这些对象的类型可以实现Comparable,因此您可以使用Collections的排序方法。如果您愿意,您可以将 ArrayList 转换为数组并以这种方式对其进行排序,但它看起来不像您想要的那样。下面是一个使用这两种方法的简单示例:

void setup(){
  int count = 100,now;
  stroke(192,0,0);strokeWeight(count/width);
  //make up some data
  ArrayList<Pair> p = new ArrayList<Pair>();
  for(int i = 0 ; i < count ; i++) {
    Pair pair = new Pair(i,random(10,100));
    p.add(pair);
    float x = map(i,0,count,i,width);
    float y = map(pair.distance,10,100,0,50);
    line(x,50,x,50-y);
  }

  now = millis();

  //Sort typed ArrayList by converting to array first
  println("sort typed array: \n");
  Pair[] s = new Pair[p.size()];
  p.toArray(s);
  Arrays.sort(s);

  println("took " + (millis()-now) + " ms");

  now = millis();

  //Sort using Collections
  println("\n\nsorting typed array list: \n" );
  Collections.sort(p);

  println("took " + (millis()-now) + " ms");

  stroke(0,192,0);
  for(int i = 0 ; i < count ; i++) {
    Pair pair = p.get(i);
    float x = map(i,0,count,i,width);
    float y = map(pair.distance,10,100,0,50);
    line(x,100,x,100-y);
  }

}
class Pair implements Comparable<Pair>{
  public int id;
  public float distance;
  Pair(int i, float d){
    id = i;
    distance = d;
  }
  int compareTo(Pair p){
    if     (p.distance > this.distance) return  1;
    else if(p.distance < this.distance) return -1;
    else return 0;
  }
  String toString(){    return id+":"+distance;    }
}
于 2012-10-03T00:03:10.193 回答