[C#] List<T>란 무엇인가?
카테고리: CSharp
태그: Collecitons
System.Collections.Generic.List<T>에 대해 공부하다가 알게된 정보를 정리한 글입니다.
주로 어떤 원리로 작동되는 지 공부해 정리하였습니다.
List<T>란?
- List<T>는 필요에 따라 크기가 동적으로 증가하는 T타입 배열이다
- 내부에 요소를 보관할 배열을 가지고 있다
- 정렬을 보장하지 않는다
- 인덱스는 정수 인덱스로 접근이 가능하다
List<T>는 어떻게 동적 배열로 작동하는가?
- 요소를 추가할 때마다 남은 공간이 없을 때 현재 capacity의 2배 크기의 배열을 새로 할당해 요소를 복사한다
- 그래서 계속 요소를 추가할 수 있었던 것이다
생성자
List()
- 용량이 0인 정적 배열을 참조 (바로 배열 할당이 이루어 지는 것은 아님)
- 첫 요소를 추가할 때 기본 초기 용량 크기의 배열이 할당되어 참조 (.NET Framework 4.8에서 기본 초기 용량은 4)
- List(int capacity)
- capacity 크기의 배열을 할당해 참조
- List(IEnumerable<T> collection)
- collection이
ICollection<T>
를 구현한 경우- Count를 가져와 Count 크기의 배열을 할당 및 요소 복사
- 구현을 못 한 경우
- 열거자를 통해 모든 요소를 순회하면서
Add(T item)
호출
- 열거자를 통해 모든 요소를 순회하면서
요소 추가
- 요소를 추가할 때 배열에 남은 공간이 없을 경우 현재 capacity의 2배 크기의 배열을 새로 할당해 요소를 전부 복사한다
- 따로 인덱스를 지정하지 않으면 마지막에 추가된다
- 만약 중간에 요소를 추가하는 경우 추가되는 위치 뒤에 있던 요소들은 뒤로 복사한다
요소 제거
- 중간에 있는 요소를 제거하는 경우 제거되는 위치 뒤에 있던 요소들을 앞으로 복사한다
- 요소 제거 후 사용되지 않는 요소는
default
로 설정된다
내부 배열에 변경이 생겼을 때
- this[], Add, Remove, Sort 등등
- version이 올라감
- version은
ForEach
나Enumerator
를 사용할 때 유효성 검사 목적으로 사용됨
출처
💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸
댓글 남기기