ArrayList의 특징은 배열 공간(capacity)가 꽉 차거나, 요소 중간에 삽입을 행하려 할때 기존의 배열을 복사해서 요소를 뒤로 한칸씩 이동한다는 것이다.
ArrayList의 구조는 용량이 리밋에 달하면, 보통 2배에 달하는 내부 배열이 새로 생기게 된다.
이 ArrayList가 메모리 사용측면에서 좋지 않다는 이야기들이 여럿 있다.
가령, ArrayList는 원시타입을 쓰지 않아서, 원시 타입으로 넣어도 래퍼 타입으로 내부적으로 변환한다. 다만, 정말 고성능이 요구되는 게 아니라면 컴파일러 최적화 때문에 큰 차이는 없을 거라는 의견도 있다.
또한, 배열은 항목 추가와 가져오기가 리스트보다 빠르다. 그래서,배열 크기를 사전에 알고 있다면 배열을 사용하는 것이 메모리를 절약할 수 있다. 하지만 리스트는 데이터 조작에 더 많은 유연성과 메소드를 제공한다는 것이 특징이다.
Linkedlist와 비교할 때도, 성능적으로는 큰 차이가 없다는 글도 많다. ArrayList는 리사이징 과정에서 배열 복사하는 추가 시간이 들지만, 배열을 새로 만들고 for문을 돌려 기존 요소를 일일히 대입하는 그러한 처리가 아니라, 내부적으로 잘 튜닝이 되고 최적화 되어있어 우리가 생각하는 것처럼 전혀 느리지않다고 한다.