2014-04-21 1 views
2

나는목록 용량 예기치 않게 증가하는 속성 .. 왜?

.. 나는 목록에 하나 개의 고객을 추가 0

List<Customer> firstCustomerList = new List<Customer>(); 
목록의

출력 용량 속성이 0입니다

의 초기 크기, 고객 개체, 말의 목록을 작성

firstCustomerList.Add(customer1); 

지금은 목록의 출력 용량 속성은 4

는 고객 객체가 실제로 단지 하나의 객체 인하지입니다 노트 목록. 더 자세히 요점은, 내가 3 Customer 개체를 추가 한 다음 목록에 TrimExcess() 메서드를 적용하면 List가 올바른 크기로 축소됩니다.

그래서 왜 단일 개체를 추가하여 목록 용량을 4로 늘립니까?

+0

그래서 본질적으로 메모리를 미리 할당합니까? – user3308043

+1

본질적으로 그렇습니다. – ClickRick

답변

5

Capacity은 실제로 데이터를 보유하고있는 어레이의 크기입니다. Count은 목록의 요소 수입니다.
배열에 요소를 추가하는 것은 값이 쌉니다. 배열의 크기가 충분해야합니다. 리스트는 얼마나 큰지 알지 못하기 때문에 배열 크기를 동적으로 Capacity 크기로 조정해야합니다. 비싸기 때문에 (모든 요소를 ​​복사해야 함) 크기 조정 작업을 제한하기 위해 필요 이상으로 할당합니다.

+0

그래서 1 개의 객체가 아니라면 배열은 무엇을 유지합니까? – user3308043

+1

개수가 1이고 용량이 4 인 목록은 추가 한 요소를 제외하고는 비어있는 크기가 4 인 배킹 배열 (= 'Capacity')과 목록에 다음 요소를 쓸 위치를 알려주는 int 포인터가 있습니다. 정렬. – kat0r

관련 문제