在java中对间隔进行排序

时间:2014-10-02 11:15:55

标签: java

我以输入文件的形式给出时间间隔。

INPUT FILE
2 3   //First  start time and second one end time
5 6
9 11
3 10

我想根据开始时间的基本情况对间隔进行排序,即

(2,3) , (3,10) ,(5,6) ,(9,11)

我是否必须制作此结构。或者它可以直接完成。 我的方法:

class Interval implements Comparable<Interval>{

        private int start , end;
        public Interval(int start , int end){
            this.start = start;
            this.end = end;
        }
        public int compareTo(Interval o) {
            // TODO Auto-generated method stub
            if(o==null)
                return -1;
            return  start-o.start;
        }


    }

我没有得到它的输出。
有没有更好的方法 请帮帮我。

5 个答案:

答案 0 :(得分:1)

compareTo()方法没有问题。似乎你不知道如何使用它。 你应该以这种方式使用它。

public class Interval implements Comparable<Interval>{
private int start , end;
public Interval(int start , int end){
    this.start = start;
    this.end = end;
}
public int compareTo(Interval o) {
    if(o==null)
        return -1;
    return  start-o.start;
}
@Override
public String toString() {
    return "Interval{" +
            "start=" + start +
            ", end=" + end +
            '}';
  }
}

现在该怎么用?

  Interval interval1 = new Interval(2, 3);
  Interval interval2 = new Interval(5, 6);
  Interval interval3 = new Interval(9, 11);
  Interval interval4 = new Interval(3, 10);

  List<Interval> list = new ArrayList<>();
  list.add(interval1);
  list.add(interval2);
  list.add(interval3);
  list.add(interval4);

  System.out.println(list);
  Collections.sort(list);
  System.out.println(list);

Out put:

  [Interval{start=2, end=3}, Interval{start=5, end=6}, Interval{start=9, end=11}, Interval{start=3, end=10}]
  [Interval{start=2, end=3}, Interval{start=3, end=10}, Interval{start=5, end=6}, Interval{start=9, end=11}]

答案 1 :(得分:0)

如果使用列表,您需要致电Collection.sort(list);。您还可以使用SortedSetTreeMap来对收藏品进行排序。

答案 2 :(得分:0)

您的compareTo()方法有效。使用Collections.sort(),你就可以了。

    List<Interval> intervals = new ArrayList<Interval>();
    intervals.add(new Interval(2, 3));
    intervals.add(new Interval(5, 6));
    intervals.add(new Interval(9, 11));
    intervals.add(new Interval(3, 10));
    Collections.sort(intervals);

答案 3 :(得分:0)

Integer类有一个比较函数,可以为你进行比较

class Interval implements Comparable<Interval>{

  ....

  public int compareTo(Interval o) {
    return Integer.compare(start, o.start);
  }
}

答案 4 :(得分:0)

试试这个:

class Interval implements Comparable<Interval>{

    private int start , end;

    public Interval(int start , int end){
        this.start = start;
        this.end = end;
    }
    public int compareTo(Interval o) {
        if(o==null)
            return -1;
       return Integer.compare(o.start, this.start);
    }
}

public void test(){

    Interval[] ar = new Interval[4];
    ar[0] = new Interval(1,2);
    ar[1] = new Interval(10,2);
    ar[2] = new Interval(2,2);
    ar[3] = new Interval(94,2);
    Arrays.sort(ar);
    for(int i=0, len=ar.length; i<len; i++){
        System.out.println("( "+ar[i].start+" ,"+ar[i].end+")");
    }

}