Java通过3个类进行排序
如何按索引对事件排序Java通过3个类进行排序,java,arrays,class,sorting,Java,Arrays,Class,Sorting,如何按索引对事件排序 我的项目的简单视图: class Event{ int index; } class EventField{ Event[] field; } class Action{ EventField ev; ev.sort(); // Sort event in field EventField by index } 您需要在EventField class EventField{ Event[] field; pu
我的项目的简单视图:
class Event{
int index;
}
class EventField{
Event[] field;
}
class Action{
EventField ev;
ev.sort(); // Sort event in field EventField by index
}
您需要在
EventField
class EventField{
Event[] field;
public void sort(){ Arrays.sort(field, yourCustomComparatorInstance }
}
它使用事件上的自定义比较器进行排序
相关:
见
使用正在使用的
Arrays.sort(ev.field,新比较器(){
@凌驾
公共整数比较(事件e1、事件e2){
返回整数。比较(e1.index,e2.index)
}
});
在java中,有两种定义顺序的方法,您可以创建一个用于创建排序策略的方法,或者定义类的实现顺序
使用比较器的示例:
class Event{
private int index;
public static final Comparator<Event> INDEX_COMPARATOR = new MyComparator();
//TODO define getters and setter equals & hashCode cause it's strong recommended
static class MyComparator implements Comparator<MyClass>{
@Override
public int compare(Event o1, Event o2) {
return Integer.valueOf(o1.index).compareTo(o2.index);
}
}
}
阅读更多:
如果您想定义类的自然顺序,只需定义
public class Event implements Comparable<Event>{
private int index;
//define getter&setter & recommended equals & hashCode
@Override
public int compareTo(Event o) {
return Integer.valueOf(index).compareTo(o.index);
}
}
如果事件在程序中自然会比较很多,则可以扩展Comparable
界面:
public class Event implements Comparable<Event> {
private int index;
public int getIndex() {
return index;
}
@Override
public int compareTo(Event o) {
return index == o.getIndex() ? 0 : (index > o.getIndex() ? 1 : -1);
}
}
公共类事件实现可比较{
私有整数索引;
public int getIndex(){
收益指数;
}
@凌驾
公共int比较(事件o){
返回索引==o.getIndex()?0:(索引>o.getIndex()?1:-1);
}
}
然后可以调用Arrays.sort(ev.getField())
。如果总是要对“field”中的对象进行排序,那么只要在添加内容时对其对象进行排序即可。作为相关问题,不要使用返回o1.getX()-o2.getX()
,因为当您将接近整数.MIN\u值的数字与接近整数.MAX\u值的数字进行比较时,它可能会溢出。看见
public class Event implements Comparable<Event>{
private int index;
//define getter&setter & recommended equals & hashCode
@Override
public int compareTo(Event o) {
return Integer.valueOf(index).compareTo(o.index);
}
}
Arrays.sort(fields); // where fields is Event[]
public class Event implements Comparable<Event> {
private int index;
public int getIndex() {
return index;
}
@Override
public int compareTo(Event o) {
return index == o.getIndex() ? 0 : (index > o.getIndex() ? 1 : -1);
}
}