ArrayList 및 List 컬렉션 형식
System.Collections.ArrayList 또는 System.Collections.Generic.List<T> 개체는 고급 버전의 배열입니다. ArrayList 클래스 및 List<T> 제네릭 클래스는 대부분의 System.Collections 클래스에서 제공되지만 Array 클래스에서는 제공되지 않는 일부 기능을 제공합니다. 예를 들면 다음과 같습니다.
Array의 용량은 고정되어 있지만 ArrayList 또는 List<T>의 용량은 필요에 따라 자동으로 확장됩니다. ArrayList.Capacity 속성의 값이 변경될 경우 메모리 재할당 및 요소 복사가 자동으로 이루어집니다.
ArrayList 및 List<T>은 요소 범위를 추가, 삽입 또는 제거하는 메서드를 제공합니다. Array에서는 한 번에 하나의 요소 값만 얻거나 설정할 수 있습니다.
ArrayList의 동기화된 버전은 Synchronized 메서드를 사용하여 손쉽게 만들 수 있지만 이러한 형식의 동기화는 비교적 효율성이 떨어집니다. Array 및 List<T> 클래스는 동기화 구현을 전적으로 사용자에게 맡깁니다. System.Collections.Concurrent 네임스페이스에서는 동시 목록 형식을 제공하지 않는 대신 ConcurrentQueue<T> 및 ConcurrentStack<T> 형식을 제공합니다.
ArrayList 및 List<T>는 읽기 전용 및 고정 크기의 래퍼를 컬렉션에 반환하는 메서드를 제공하지만 Array는 제공하지 않습니다.
반면, Array는 ArrayList 및 List<T>이 제공하지 못하는 유연성을 제공합니다. 예를 들면 다음과 같습니다.
Array는 여러 차원을 가질 수 있지만 ArrayList 또는 List<T>은 항상 한 차원만 가집니다. 그러나 배열의 목록이나 목록의 목록은 손쉽게 만들 수 있습니다.
특정 형식(Object 제외)의 Array 성능은 ArrayList 성능보다 좋습니다. 이는 ArrayList의 요소가 Object 형식이므로 값 형식을 저장하거나 검색할 때 대개 boxing 및 unboxing이 발생하기 때문입니다. 그러나 List<T>는 재할당이 필요 없는 경우 즉, 초기 용량이 목록의 최대 크기와 비슷한 경우 같은 형식의 배열과 비슷한 성능을 제공할 수 있습니다.
배열을 호출하는 대부분의 상황에서 ArrayList 또는 List<T>을 대신 사용할 수 있습니다. 이 둘은 일반적으로 사용이 간편하고 해당 성능은 동일한 형식의 배열 성능과 비슷합니다.
Array는 System 네임스페이스에 있고, ArrayList는 System.Collections 네임스페이스에 있고, List<T>은 System.Collections.Generic 네임스페이스에 있습니다.