C'è List. E' una classe astratta rappresentante una lista di dati.
Le sue implementazioni sono tutte non thread-safe e tutte di lunghezza indefinita come dici tu e ce ne sono 2: l'ArrayList (come un array, anche perchè è rappresentato con un array in memoria) e la LinkedList che è la classica double linked list.
Tutt'e due sono iterabili tramite .get(int index) oppure il ListIterator che ti permette di andare sia avanti che indietro.
Per te credo che l'ArrayList sia sufficiente.