RecyclerView был создан как улучшенная замена ListView. Основные отличия следующие:

1. RecyclerView переиспользует ячейки списка при скроллинге. Для реализации этой логики используется класс ViewHolder.
В ListView тоже можно реализовать адаптер с ViewHolder, но это необязательно и требует написания бойлерплейт кода.

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

3. Логика отображения анимации элементов вынесена из RecyclerView в класс ItemAnimator.

В целом RecyclerView имеет более гибкий API, чем ListView, благодаря хорошему дизайну и соответствию принципу единственной ответсвенности.