You can only read a specific line without using a List if you already know how many lines there are. If you don't you may end up trying to read a line that simply isn't there.
As for how List and ArrayList work, it's really simple. In pseudo code:
For more information, read
this.