Что значит ошибка List is abstract в Java: решение
Быстрый ответ
В Java создание списка обычно происходит с использованием ArrayList или LinkedList. Вот пример инициализации ArrayList:
List<String> list = new ArrayList<>();
В данном примере проведена инициализация списка типа String. Использование "алмазного оператора" (diamond operator) помогает упростить код.
Интерфейс или класс?
В Java "List" является интерфейсом, поэтому нельзя создать его экземпляр. Интерфейс служит своего рода договорённостью, определяя методы, которые классы должны реализовывать.
Реализации: ArrayList или LinkedList?
Основными реализациями интерфейса List являются ArrayList и LinkedList. Ваш выбор должен быть обоснован требованиями: ArrayList эффективен при операциях чтения, тогда как LinkedList лучше подходит для операций вставки и удаления.
Пользовательская реализация: Не всегда нужна
Создание собственного класса, реализующего List, может быть интересным, но чаще всего это не требуется из-за эффективности уже существующих ArrayList и LinkedList.
LinkedList: Чемпион по вставке/удалению
Если в вашем приложении часто происходят операции вставки и удаления, особенно в середине списка, лучшим выбором будет LinkedList.
ArrayList: Эксперт по произвольному доступу
Если для вас важен быстрый доступ к элементам списка по их индексам, то ArrayList позволит извлекать элементы с постоянной скоростью.
Столкнулись с невыполнимым
Если вы пытаетесь напрямую создать экземпляр List и сталкиваетесь с ошибкой, то это напоминает вам о том, что интерфейсы в Java предназначены для объявления методов, а их реализация отдается на откуп конкретным классам.
Упомянем об Апкастинге
Присваивание объекта типа ArrayList переменной типа List является примером апкастинга, позволяющего достичь гибкости кода.
Визуализация
List — это абстракция, чертёж. ArrayList и LinkedList — это конкретные инструменты, готовые к действию.
List tools = new ArrayList(); // Ящик с инструментами открыт.
List tools = new LinkedList(); // Пояс для инструментов надет.
Полиморфизм в действии
Благодаря апкастингу можно легко переключаться между ArrayList и LinkedList, используя силу полиморфизма. Мы программируем с учетом интерфейсов, а не конкретных классов!
Java vs. .NET: Подходы к спискам
В мире .NET есть возможность напрямую создать список, тогда как в Java выбор между ArrayList и LinkedList должен быть обоснован.
Если стандартного недостаточно
Иногда для достижения конкретного поведения списка требуется расширить стандартный ArrayList или LinkedList.