Поведение коллекций. Сортировка (); - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь понять поведение сортировки Collections.sort (), когда присутствует смесь цифр и букв.Из проведенного исследования я понимаю, что числа сортируются перед буквами, а строки сортируются по алфавиту.Тем не менее, этот пример все еще немного сбивает меня с толку.Если числа сортируются первыми, почему результат не будет [8, 30, 3A, FF]?

В этом примере ниже результат будет [30, 3A, 8, FF]

List<String> hex = Arrays.asList("30", "8", "3A", "FF");
Collections.sort(hex);
System.out.println(hex);

Но в этом примере результат [30, 40, 50, 60]

  List<String> nums = Arrays.asList ("50", "30", "60", "40");
  Collections.sort(nums);
  System.out.println(nums);

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Результат - 30, 3A, 8, FF, потому что числа идут первыми, а 3 в алфавитном порядке перед 8. Вы не сравниваете числа.Вы сравниваете строки.Для сортировки чисел вам понадобится List<Integer>.

Если вы хотите выполнить сортировку на основе двух разных типов данных, вам нужно реализовать собственный метод сортировки внутри Collections.sort, используя объект-оболочку.

0 голосов
/ 11 февраля 2019

Способ сортировки со строками начинается с первого символа сравниваемых элементов.Если первый символ первого элемента ниже, чем первый символ второго элемента, то первый элемент ниже и, следовательно, он сверху.

Если первые символы равны, то он переходит ко второму и т. Д....

Примеры

«80» по сравнению с «3600» ==> «3» ниже, чем «8», поэтому «3600» ниже, чем «80 "

" 88 "по сравнению с" 830 "==> '8' равно '8', затем попытайтесь со вторым '3' ниже, чем '8', так что '830' ниже, чем"88"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...