2016-06-13 2 views
2

У меня есть класс «Сегмент», через который я получаю значения из 2 массивов. мой основной методКак сортировать объект в java

public static void main(String[] args) { 
     Scanner scanner = new Scanner(System.in); 
     int n = scanner.nextInt(); 
     Segment[] segments = new Segment[n]; 
     for (int i = 0; i < n; i++) { 
      int start, end; 
      start = scanner.nextInt(); 
      end = scanner.nextInt(); 
      segments[i] = new Segment(start, end); 
     } 
} 

класс сегмента является, как показано ниже.

private static class Segment { 

     int start, end; 

     Segment() { 
     } 

     Segment(int start, int end) { 
      this.start = start; 
      this.end = end; 
     } 
} 

Теперь, как отсортировать сегменты по отношению к конечной точке.

+0

«Сегмент», через который я получаю значения из 2 массивов. «Является ли начало и конец массивом? Любая конкретная причина объявить класс статичным? – sauumum

ответ

2

Для сортировки используйте Arrays.sort и внесите Comparator.

Arrays.sort(segments, new Comparator<Segment>() { 
    @Override 
    public int compare(Segment o1, Segment o2) { 
     return Integer.compare(o1.getEnd(), o2.getEnd()); 
    } 
}); 
1

Вы можете Segment реализовать Сопоставимые:

private static class Segment implements Comparable<Segment> { 
    int start, end; 
    Segment() { 
    } 
    Segment(int start, int end) { 
     this.start = start; 
     this.end = end; 
    } 
    @Override 
    public int compareTo(Segment otherSegment) { 
     int result = 0; 
     if (start != otherSegment.start) { 
      result = start < otherSegment.start ? -1 : 1; 
     } 
     return result; 
    } 
    @Override 
    public String toString() { 
     return "Segment [start=" + start + ", end=" + end + "]"; 
    } 
} 

Я изменил свой массив в список, и использовать коллекции для сортировки:

Collections.sort(segments); 

Ваш измененный код:

Scanner scanner = new Scanner(System.in); 
    int n = scanner.nextInt(); 
    List<Segment> segments = new ArrayList<Segment>(); 
    for (int i = 0; i < n; i++) { 
     int start, end; 
     start = scanner.nextInt(); 
     end = scanner.nextInt(); 
     segments.add(new Segment(start, end)); 
    } 

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

Вставьте свой запрос ng в коде compareTo. Это похоже на использование компаратора , разница заключается в том, хотите ли вы, чтобы логика сортировки находилась в сегменте или в классе утилиты.

+0

Большое вам спасибо. –

0

Вы должны сделать класс Segement реализованным интерфейсом Comparable и переопределить метод compareTo(), а затем использовать: Segements.sort() // для сортировки.

Смежные вопросы