The problem Iterator solves
A playlist is an array, so the code that plays it uses an index: for (int i = 0; i < playlist.size(); i++). Forty places in the app do the same, plus the shuffle screen, the export, the duration total and the search.
Then playlists get very long and you switch to a linked list for cheap insertion. Every index-based loop is now quadratic — each get(i) walks from the head. Nothing breaks; it just gets slower until someone profiles it.
Then playlists gain folders, so the structure is a tree. Now every loop needs recursion. Then playlists move to the server and arrive one page at a time, so every loop needs to know about page tokens and network errors.
Four storage changes, and each one edited forty pieces of code that never cared how tracks were stored. All they ever wanted was "give me the next track".
