Java - Проверка, находятся ли ArrayList из String в алфавитном порядке - PullRequest
4 голосов
/ 02 января 2012

У меня есть ArrayList с именем account, который содержит строки. Я пытаюсь написать метод, который проверяет, в порядке ли они, и возвращает истину или ложь в зависимости от того, в порядке они или нет.

Как бы вы поступили по этому поводу? Я уже пытался проверить начальный характер с помощью цикла for, но он пошел ужасно неправильно. Я создал новый ArrayList и установил его равным оригиналу, затем отсортировал и сравнил их, но, поскольку они содержали одни и те же данные, он всегда возвращался.

Просто очень быстрый вопрос, поскольку я делаю это для строк, как бы вы проверили, были ли некоторые числа в порядке возрастания / убывания? Через тот же принцип?

Thankyou!

Ответы [ 6 ]

11 голосов
/ 02 января 2012

Попробуйте это (если, конечно, вы хотите сравнить строки, используя их естественный порядок):

String previous = ""; // empty string: guaranteed to be less than or equal to any other

for (final String current: thelist) {
    if (current.compareTo(previous) < 0)
        return false;
    previous = current;
}

return true;

Это связано с тем, что String реализует Comparable<String>, и сравнение будет выполнено с использованием естественного упорядочения строк.

6 голосов
/ 02 января 2012

Если вы не возражаете против использования внешней библиотеки (Гуава), то Ordering сделает:

boolean isSorted = Ordering.natural().isOrdered(list);

Это подойдет для String и других Comparables. Если вы проверяете порядок какого-либо пользовательского типа, используйте любой из статических фабричных методов в классе Ordering или сделайте его подклассом.

Редактировать для использования без учета регистра:

boolean isSorted = Ordering.from(String.CASE_INSENSITIVE_ORDER).isOrdered(list);
2 голосов
/ 02 января 2012

Я думаю, что цикл for подойдет для этого. Подход, который я выбрал бы, состоял бы в том, чтобы сравнить каждое слово с предыдущим и посмотреть, в правильном ли они алфавитном порядке. Наилучшим случаем является O (2) для определения того, что список не в порядке, наихудший случай O (n) для сообщения о том, что список в порядке.

Редактировать: Ответ FGE выше обрисовывает в общих чертах код для описанного подхода.

0 голосов
/ 02 января 2012

Используйте метод сортировки Коллекция Класс:

List<String> list = new ArrayList<String>();
//Add Elements
Collections.sort(list);

Сортирует указанный список по возрастанию в соответствии с естественное упорядочение его элементов.

0 голосов
/ 02 января 2012
ArrayList<String> initial = // smth
ArrayList<String> copy = // copy initial list here
Collections.sort(initial);
return initial.equals(copy);
0 голосов
/ 02 января 2012

Просто используйте цикл и проверьте, в порядке ли они:

boolean isSorted = true;
for(int i = 0; i < list.size() - 1; i++) {
   // current String is > than the next one (if there are equal list is still sorted)
   if(list.get(i).compareToIgnoreCase(list.get(i + 1)) > 0) { 
       isSorted = false;
       break;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...