2015-04-28 4 views
0

В соответствии с documentation: Эта реализация свалки указанного списка в массив, сортирует массив и перебирает список перезапуске каждый элемент из соответствующей позиции в массивеСортировка строк с помощью метода Collections.sort()

Учитывая приведенную ниже программу, я не могу понять сортировку, как внутренне jvm считает, что письмо 'A' меньше или больше, чем письмо 'a'? Поскольку это строка, буквы не будут приниматься в значении ascii, так как происходит сортировка?

public class LetterASort { 
    public static void main(String[] args) { 
     ArrayList<String> strings = new ArrayList(); 
     strings.add("aAaA"); 
     strings.add("AaA"); 
     strings.add("aAa"); 
     strings.add("AAaa"); 
     Collections.sort(strings); 
     for (String s : strings) 
     { 
     System.out.print(s + " "); //prints AAaa AaA aAa aAaA 
     } 
    } 
} 

Также я попытался отладки кода, который создал новое сомнение для меня: длина массива оказался 4, а не 3, как collections.sort входит в длину

+3

Почему вы ожидаете длину 3? Я вижу 4 элемента, добавленных в arraylist –

+0

, но длина индекса массива начинается с 0 справа? – kittu

+3

Да, но это нормально: a _length_ из 4 означает, что индекс _last_ равен 3. Индексы являются {0, 1, 2, 3}. Здесь есть четыре числа (т. Е. Длина), наибольшая из которых равна 3 (т. Е. Последнему индексу). – yshavit

ответ

5

«Естественный упорядочением» Collections.sort относится к указанному Comparable - который String реализует и который определяет только один метод, compareTo. Итак, ответ находится в определении String.compareTo. В его документации указано:

Сравнивает две строки лексикографически. Сравнение основано на значении Unicode каждого символа в строках.

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

Unicode - это числовое значение, которое имеет каждый символ. Там есть замечательная вступительная статья об этом here (это не коротко, но неплохо провести вам не только то, что юникод, но и почему он существует).

+0

Не могли бы вы предоставить мне ссылку, если это возможно. Спасибо – kittu

+0

Ссылка на что? Слова «Comparable» и «String.compareTo» связаны с их соответствующей документацией. Я был бы рад связаться со всем, что вам нужно, просто дайте мне знать. – yshavit

+0

@kittu - [здесь] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/java/util/Collections.java#Collections.sort%28java. util.List% 29) проверьте исходный код и следуйте по ссылкам :) – TheLostMind

3

String класс реализует интерфейс Comparable. Когда сортировка происходит, вызывается метод compareTo(String). Подробнее см. Реализацию метода compareTo(String) в классе String.