# 2.2 RecyclerView Performance

For a RecyclerView, each item in the dataset is represented by a cell in the list. Only the cells that are immediately visible to the user are created at runtime; the hidden cells will be rendered as you scroll. This is how the compiler handles the rendering of the list.&#x20;

### Performance with RecyclerView

The recycler view only creates the cells that are immediately visible to the user, but the recycler view utilizes the `ViewHolder` pattern, a holder for cell metadata that maximizes performance by reducing the amount of times that `view.findViewById()` is called by the system. As the user scrolls, the recycler view will either create new view holders as necessary or reuse the view holders that have been offscreen the longest. By reusing view holders, we can reduce the number of calls to `view.findViewById()`.

### Why use RecyclerView over Alternatives?

`RecyclerView` has many in-app memory optimization that is already completed for developers. For example, `RecyclerView` forces developers to use the `ViewHolder` pattern.&#x20;

`RecyclerView` was created as a direct enhancement to `ListView`  which we will learn about in lecture 5 and thus, `RecyclerView` is easier to use and manipulate for complex lists. However, as you will see in Lecture 5, there will be instances where it makes more sense to use a `ListView` to save development time, like with the menu in Eatery. We'll go into more detail about this in the next section.&#x20;
