1

オブジェクトを含むがありlinked listます。オブジェクトの属性は次のoように定義されます。

bandWidth
ImageSize
VmCount

に基づいてリストをソートするにはどうすればよいbandWidthですか? リストを次のように定義します。

list.add(o_1);
list.add(o_2);
list.add(o_3);
list.add(o_4);

ここで、帯域幅が最大のオブジェクトがリストの最初になるようにリストを並べ替えたいと思います。

4

2 に答える 2

4

Java のクラスには、と実装をCollections受け取る静的sortメソッドがあります。ListComparator

public static <T> void sort(List<T> list, Comparator<? super T> c) {...}

Comparatorに基づいて値を返すように独自に実装しますbandWidthcompare(T o1, T o2)メソッドのルールに従う

順序について 2 つの引数を比較します。最初の引数が 2 番目の引数より小さい、等しい、または大きい場合、負の整数、ゼロ、または正の整数を返します。

public static class MyComparator implements Comparator<MyObject> {
    @Override
    public int compare(MyObject o1, MyObject o2) {
        return o1.getField() - o2.getField();
    }       
}

public static class MyObject {
    private int field;
    public int getField() {
        return field;
    }
    public void setField(int field) {
        this.field = field;
    }
}
于 2013-08-26T16:14:38.907 に答える
0

最小限の作業例を次に示します。

import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;

class MyClass {
    int bandWidth;
    int imageSize;
    int VmCount;

    public MyClass(int bandWidth, int imageSize, int VmCount) {
        this.bandWidth = bandWidth;
        this.imageSize = imageSize;
        this.VmCount = VmCount;
    }  
}

class MyComparator implements Comparator<MyClass> {
    public int compare(MyClass object1, MyClass object2){
        return object2.bandWidth - object1.bandWidth; // sort the list in descending order
        //return object1.bandWidth - object2.bandWidth; // sort the list in ascending order
    }
}

public class Test {
    public static void main(String[] args) {
        List<MyClass> objects = new LinkedList<>();
        objects.add(new MyClass(1,2,3));
        objects.add(new MyClass(3,2,3));
        objects.add(new MyClass(2,2,3));
        Collections.sort(objects, new MyComparator());
        for (MyClass object: objects) {
            System.out.println(object.bandWidth);
        }
    }
}

このコード行を完全に理解していないため:

return object2.bandWidth - object1.bandWidth;

別の方法で実装してみましょう。

if (object2.bandWidth > object1.bandWidth) {
  return 1; //it can be any positive number
} else if (object2.bandWidth == object1.bandWidth){
  return 0;
} else {
  return -1; //it can be any negative number
}
于 2013-08-26T16:30:02.077 に答える