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);
    } 
}