проблема структуры коллекции Java - PullRequest
1 голос
/ 12 мая 2011

Я изучаю коллекцию в Java и застрял, понимая следующее. Оно взято из scjp Халидом Моголом (обзорный вопрос 15.37)

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class WhatIsThis {
  public static void main(String[] args) {
    List<StringBuilder> list = new ArrayList<StringBuilder>();
    list.add(new StringBuilder("B"));
    list.add(new StringBuilder("A"));
    list.add(new StringBuilder("C"));
    Collections.sort(list, Collections.reverseOrder());
    System.out.println(list.subList(1,2));
  }
}

Выберите один правильный ответ.

а. Программа скомпилирует и напечатает следующее при запуске: [B].
б. Программа скомпилирует и напечатает следующее при запуске: [B, A].
с. Программа скомпилируется, но при запуске выдает исключение.
д. Программа не скомпилируется.

Следующий ответ -

(с) Класс StringBuilder не реализует интерфейс Comparable. Сортировка () метод, который использует компаратор, не предъявляет таких требований к Тип мент. Программа компилируется, но выдает ClassCastException, как String- Объекты Builder нельзя сравнивать в обратном естественном порядке.

Я не могу понять ответ, пожалуйста. Кто-нибудь может мне помочь, пожалуйста?

Ответы [ 2 ]

4 голосов
/ 12 мая 2011

Вы просматривали документацию для Collections.sort?

Сортирует указанный список в порядке возрастания в соответствии с естественным порядком его элементов.Все элементы в списке должны реализовывать интерфейс Comparable.Кроме того, все элементы в списке должны быть взаимно сопоставимы (то есть e1.compareTo (e2) не должно создавать исключение ClassCastException для любых элементов e1 и e2 в списке).

и

Броски:
ClassCastException - если список содержит элементы, которые не взаимно сопоставимы (например, строки и целые числа).

Помогает ли этоты?В основном, чтобы отсортировать список, sort должен сравнивать StringBuilder значений друг с другом - и в StringBuilder.

не существует естественного сравнения.
0 голосов
/ 12 мая 2011

Список содержит Объекты, тип которых StringBuilder.

Когда выполняется попытка сортировки, метод сортировки должен сравнить элементы, чтобы определить порядок, он делает это, обрабатывая элементы как сопоставимые, он пытается привести их к типу сопоставимый. Поскольку String Builder не реализует этот интерфейс, приведение не будет выполнено, и будет выдано исключение.

...