Из первой строки документов :
Структура коллекций представляет собой унифицированную архитектуру для представления и управления коллекциями, позволяющую манипулировать ими независимо от деталей ихпредставление.Это уменьшает усилия программирования при одновременном повышении производительности.Это обеспечивает совместимость между несвязанными API, сокращает усилия по разработке и изучению новых API и способствует повторному использованию программного обеспечения.Фреймворк основан на более чем десятке интерфейсов коллекцииОн включает в себя реализации этих интерфейсов и алгоритмы для их манипулирования.
Цель состоит в том, чтобы уменьшить дублирование кода.В случае myList.sort()
все реализации интерфейса List
должны будут реализовывать функцию sort
, и сортировка каждой реализации может отличаться по поведению.Но как статический метод класса Collections
, реализации List
не должны реализовывать функцию сортировки.С точки зрения пользователя, вы можете передать List
, что вам нужно, Collections.sort()
и знать, что произойдет.
Начиная с Java 8, эта функциональность могла быть реализована с помощью методов по умолчанию, что и является List.sort(comparator)
делает.Методы по умолчанию позволяют всем реализациям интерфейса получать реализацию, определенную в интерфейсе, поэтому из Java 8 можно сделать myList.sort()
с оговоркой, что вы должны указать ему, как сортировать, предоставивфункция сравнения.Например, если у вас есть List<Integer>
: mylist.sort(Integer::compareTo)
.Но Collections Framework предшествует методам по умолчанию, поэтому требуется Collections.sort()
.
. Также как Collections.sort()
и List.sort(comparator)
, вы также можете использовать Stream.sorted()
: myList.stream().sorted().collect(Collectors.toList());