Это реальный вопрос для начинающих (я все еще изучаю основы Java).
Я могу (вроде) понять, почему методы возвращают List <String> а не ArrayList <String> , или почему они принимают параметр List, а не ArrayList. Если это не имеет никакого значения для метода (то есть, если не требуются специальные методы из ArrayList), это сделает метод более гибким и более простым в использовании для вызывающих. То же самое относится к другим типам коллекций, например Set или Map.
Что я не понимаю: для создания таких локальных переменных, как правило, существует обычная практика:
List<String> list = new ArrayList<String>();
Хотя эта форма встречается реже:
ArrayList<String> list = new ArrayList<String>();
Какое преимущество здесь?
Все, что я вижу, является незначительным недостатком: отдельная строка импорта для java.util.List должна быть добавлена. Технически "import java.util. *" Можно было бы использовать, но я не вижу этого очень часто, вероятно, потому, что строки "импорта" автоматически добавляются некоторыми IDE.