The Java class that implements the `List` interface using a dynamic array is `ArrayList`.
`ArrayList` is part of the Java Collections Framework and stores its elements in an automatically resizable array. That design provides fast indexed access, typically constant-time, so retrieving an element with `get(index)` is efficient. When the internal array reaches capacity, the implementation allocates a larger array and moves the existing references into it.
This structure is a strong general-purpose choice when a program frequently reads elements by position or appends items at the end. Inserting or removing elements near the beginning or middle is slower because later elements must be shifted. `LinkedList`, by contrast, uses linked nodes and has different performance trade-offs; it is not the dynamic-array implementation asked for here.
`Vector` is also array-backed, but it is a legacy synchronized class rather than the usual modern answer. `HashMap` does not implement `List` at all: it stores key-value associations. `ArrayList` can hold duplicates and preserves insertion order, while its generic type parameter, such as `ArrayList<String>`, provides compile-time type checking.