2010-04-24 3 views
4

ArrayList 내부적으로 배열을 사용합니까? 우리가 기본 생성자 (new ArrayList())를 사용한다면 이것은 빈 배열인가? 감사.Arraylist는 Array를 사용합니까?

+3

왜 OO 프로그래밍의 한 가지 점은 캡슐화이므로 인터페이스를 사용하는 클래스의 내부를 알 필요가 없습니까? (평소대로 아무 것도 완벽하지 않고 지식이있는 이유가있다.) – Mark

+3

@ 마크 : 캡슐화의 목적은 내부에서 일어나는 일을 완전히 잊어 버리는 것이 아닙니다. 그것은 내부에서 무슨 일이 벌어지는지를 아는 것이 아닙니다. 시스템의 내부를 이해하는 것은 항상 유용합니다. 당신의 논리에 따르면, LinkedList 와 List 는 둘 다 똑같은 일을하기 때문에 필요하지 않습니다. –

+2

@ 마크 - 영리한 사람들이하는 일을 어떻게하는지 알 수 있도록하는 것이 좋습니다. @rkrauter - 정말 알고 싶으면 .NET Framework 라이브러리 소스 코드 (예)를 살펴 보는 것이 좋습니다. http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx – AboutDev

답변

7

예. 이를 확인하는 가장 쉬운 방법 중 하나는 소스를 살펴 보는 것입니다. reference source에 손을 올리거나 단순히 .NET Reflector을 사용하여 .NET DLL을 디 컴파일 할 수 있습니다.

여기 반사판에서의 ArrayList의 관련 부분 :

public class ArrayList : IList, ICollection, IEnumerable, ICloneable 
{ 
    static ArrayList() 
    { 
     emptyArray = new object[0]; 
    } 

    public ArrayList() 
    { 
     this._items = emptyArray; 
    } 

    private object[] _items; 

    private static readonly object[] emptyArray; 

    // etc... 
} 

이 항상 사실 인에 의존해서는 안됩니다. 이것은 구현 세부 사항이며 향후 .NET 버전에서 변경 될 수 있습니다 (아마 그렇지 않겠지 만). 또한 새 코드의 경우 ArrayList 대신 List<T>을 사용해야합니다.

+1

+1 예,이 이전 컬렉션 대신 List 을 사용해야합니다. – Pat

+0

그래서 모든 목록은 일종의 고정 배열을 내부적으로 사용합니다. 나는 stringbuilder도 배열을 사용한다는 것을 알아 차렸다. 동적 메모리가 없습니까?메모리를 미리 할당하고 물건으로 채워야합니다. 더 많은 물건을 추가해야 할 때 더 큰 메모리 공간을 미리 할당하고 물건으로 다시 채우기 시작해야합니까? 오직 내부 만 배우려고. 감사. – rkrauter

2

예 .. ArrayList는 자체적으로 배열을 사용합니다.

균등성을 제공하기 위해 Object 배열 (java에서도 C#도 동일해야 함)을 포함합니다. arraylist는 매우 동적 인 메모리 할당 클래스 인 것처럼 보이지만, 내부 연산은 배열로 가득합니다.

생성자를 호출하여 객체를 생성 할 때 내부적으로 제한된 크기의 배열을 호출하는 시간은 10 일 (실제로는 java에서 10) 일 수 있습니다. 그런 다음 arraylist에 객체를 추가 할 때 내부 배열을 증가시켜야합니다. 따라서 내부 배열의 크기를 늘려야합니다. 따라서 크기가 두 배인 새 배열이 만들어지고 이전 값이이 새 배열에 복사됩니다. 배열의 용량이 증가하므로 더 많은 객체를 추가 할 수 있습니다.

3

예, ArrayList는 배열을 사용하여 항목을 저장합니다.

용량을 지정하지 않고 ArrayList를 만들면 기본 시작 용량이 사용됩니다. 기본 시작 용량은 프레임 워크의 버전에 따라 달라질 수 있습니다. 프레임 워크 2의 경우 0으로 보입니다. 프레임 워크 1에서는 16이라고 생각합니다.

+1

IL을 보면, ArrayList는 처음에는 빈 배열을 사용합니다. 값을 추가하면 배열이 4 개 항목으로 변경됩니다. 배열이 가득 찰 때마다 용량이 두 배가됩니다. – Joren

관련 문제