有一个linked list
包含对象。对象o
的属性定义为:
bandWidth
ImageSize
VmCount
如何根据bandWidth
对列表进行排序?将列表定义为:
list.add(o_1);
list.add(o_2);
list.add(o_3);
list.add(o_4);
现在我想对列表进行排序,使得带宽最大的对象首先出现在列表中。
答案 0 :(得分:4)
Java的Collections
类有一个静态sort
方法,它接受List
和Comparator
实现
public static <T> void sort(List<T> list, Comparator<? super T> c) {...}
实施您自己的Comparator
以根据bandWidth
返回值。遵循compare(T o1, T o2)
方法
比较其订单的两个参数。返回一个负整数, 零或正整数,因为第一个参数小于,等于 到,或大于第二个。
示例
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;
}
}
答案 1 :(得分: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
}