Использование сортировки коллекцией для ArrayList

class UnfairContainer<T> implements Comparable<UnfairContainer>
{    
    private ArrayList<T> array = new ArrayList<T>();

    public void sort()
    {
        Collections.sort(array);
    }

    public int compareTo(UnfairContainer o)
    {

    }
}

Итак, у меня есть класс, который реализует сопоставимый, но когда я пытаюсь создать метод сортировки, который вызывает Collections.sort(), он выдает ошибку, в которой говорится, что я не могу вызвать сортировку коллекции с помощью ArrayList . Кто-нибудь может помочь? и помогите мне с моим методом compareTo, я застрял в том, как я должен сравнивать каждый элемент в моем ArrayList


person Keng Yang    schedule 25.04.2013    source источник


Ответы (1)


Проблема в том, что не гарантируется, что список будет сортируемым. Это связано с тем, что при вашей текущей настройке T может быть чем угодно, включая класс, который не реализует Comparable и, следовательно, не может быть отсортирован по Collections. Подпись типа Collections.sort() отражает это:

public static <T extends Comparable<? super T>> void sort(List<T> list);

Чтобы исправить это, вам нужно установить верхнюю границу для T, чтобы гарантировать, что он может быть отсортирован:

class UnfairContainer<T extends Comparable<T> > 
        implements Comparable<UnfairContainer<T> >
{

...

T extends Comparable<T> означает, что T должен быть классом, реализующим Comparable. Это позволяет Collections знать, что ArrayList можно сортировать, и все работает.

Для получения дополнительной информации обратитесь к следу Java по ограниченным подстановочным знакам в универсальных шаблонах

person ApproachingDarknessFish    schedule 25.04.2013