2014-02-19 4 views
-1

Может кто-то пожалуйста, объясните выход для следующей функции:Как сортируются строки?

public static void main(String args[]) { 
    String str1 = new String("20"); 
    String str2 = new String("100"); 
    List<String> list = new ArrayList<>(); 
    list.add(str1); 
    list.add(str2); 
    Collections.sort(list); // list is [100,20] now 
} 

Я надеюсь, что сортировка работает в значениях ASCII для ввода, то есть 49 на 1, 50 для 2 и так далее.

Возможно, кто-то подтвердит?

+0

Строки сортируются в алфавитном порядке – Baldrick

+0

С «1» меньше «2», нет необходимо продолжить проверку других цифр. – Maroun

+2

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#compareTo(java.lang.String) –

ответ

7

Так Collections.sort() сортирует списки Comparable объектов, используя compareTo() метод, который каждый Comparable объекта имеет. Для String, the docs describes this as:

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

Затем он переходит к описанию лексикографический порядок двух различных строк, как рассчитывается с использованием следующего подхода:

Если две строки различны, то либо они имеют различные символы, в какой-то индекс , который действительный индекс для обеих строк или их длина различны или оба. Если они имеют разные символы в одном или нескольких положениях индекса, пусть k - наименьший такой индекс ; то строка, символ которой в позиции k имеет меньшее значение, как определено с использованием оператора <, лексикографически предшествует другой строке. В этом случае, CompareTo возвращает разность двух символьных значений в позиции к в двух строки - то есть, значение:

this.charAt(k)-anotherString.charAt(k) 

Если нет позиции индекса, при котором они различаются, то более короткая строка лексикографически предшествует более длинной строке. В этом случае, CompareTo возвращает разности длин строк - то есть, значение:

this.length()-anotherString.length() 
3

Строки сортируются лексикографически, то есть в алфавитном порядке, исходя из значения int символов, которые их образуют.

1

При сортировке коллекции, используется метод compareTo(), определенный в интерфейсе Comparable. Это означает, что порядок сортировки определен для типа класса, в данном случае java.lang.String.

Когда вы смотрите на API Docs в compareTo() методом из String класса, то вы увидите это говорит, что:

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

Таким образом, в короткие сроки, то сортируются в алфавитном порядке, а с 1 предшествует , он будет первым.

Если вы хотите изменить этот заказ, вы можете использовать метод Collections.sort(), а также предоставить аргумент Comparator.

0

сравнивает 1 с 2 на первый, так что результат 2 больше, поэтому акт сортировки завершится в это время,

думаю, что у вас есть это два номера 110, 112

, что результат:

сначала сравнивает 1 с 1 поэтому они равны, так что перейти к следующему шагу

снова 1 к 1 так перейти к следующему шагу

здесь он сравнивает 0 с 2 и здесь акт сортировки закончат

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