2016-03-04 2 views
1

Я видел несколько вопросов о сортировке для коллекций с ошибками в Java. Ошибка я показываю это:Java ArrayList Коллекции сортировать

Метод sort(List<T>) в типе Collections не применяется для аргументов (ArrayList<Time>)

я импортировал java.util.Collections и ArrayList. Я также импортировал класс, из которого я звоню. Вот мой код:

В классе вызывается из:

private ArrayList<Time> times; 

... 

public ArrayList<Time> getTimes() { 
     return this.times; 
    } 

В классе я звоню список массива в:

public class TimeTUI { 
    private Scanner scan; 
    private TimeManager timeManager; 

... 

private ArrayList<Time> getSortedTimes() { 
    ArrayList<Time> sortedTimes = this.timeManager.getTimes(); 
    Collections.sort(sortedTimes); 
    return sortedTimes; 
} 

Ошибка появляется на показе линии:

Collections.sort(sortedTimes); 

ответ

7

Класс Время должно быть сравнимым.

Collections.sort (List) ожидает, что класс T реализует интерфейс Comparable. Если вы использовали многие из встроенных классов, вы не найдете проблемы, но для пользовательских классов сортировка не знает, как их сортировать. Итак, реализуя интерфейс Comparable, вы даете определение методу compareTo.

public class Time implements Comparable { 
    public int compareTo(Object o) { 
    // provide your logic of how to sort Time objects. 
    } 
} 
+0

Это может быть, я объясняю ответ. – Buddha

+1

@intboolstring Это почти наверняка ответ. Почему бы ему не опубликовать его как один? –

+0

@intboolstring Вы слишком быстры. Я ценю вас за то, что вы являетесь хорошим участником сообщества stackoverflow. Я просто набрал образец класса в своем представлении и сочинил. :) – Buddha

2

в List или ArrayList Ваш тип класс должен реализовать интерфейс comparable и переопределить правильно метод compareTo(...),

ли вы разорвать этот контракт и Dont реализовать интерфейс. у Class Collections нет действительного критерия/правила для сравнения/сортировки вашего списка, и поэтому ваш компилятор будет жаловаться ...

2

Я не думаю, что здесь проблема с ArrayList. Например:

ArrayList<String> names = new ArrayList<>(); 
... 
Collections.sort(names); 

работает просто отлично. Содержание списка должно быть сопоставимым, чтобы сортировка могла работать. В этом случае класс времени и любой подтип должны реализовывать Comparable.

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