ArrayList 내부적으로 배열을 사용합니까? 우리가 기본 생성자 (new ArrayList())를 사용한다면 이것은 빈 배열인가? 감사.Arraylist는 Array를 사용합니까?
답변
예. 이를 확인하는 가장 쉬운 방법 중 하나는 소스를 살펴 보는 것입니다. 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>
을 사용해야합니다.
예 .. ArrayList는 자체적으로 배열을 사용합니다.
균등성을 제공하기 위해 Object 배열 (java에서도 C#도 동일해야 함)을 포함합니다. arraylist는 매우 동적 인 메모리 할당 클래스 인 것처럼 보이지만, 내부 연산은 배열로 가득합니다.
생성자를 호출하여 객체를 생성 할 때 내부적으로 제한된 크기의 배열을 호출하는 시간은 10 일 (실제로는 java에서 10) 일 수 있습니다. 그런 다음 arraylist에 객체를 추가 할 때 내부 배열을 증가시켜야합니다. 따라서 내부 배열의 크기를 늘려야합니다. 따라서 크기가 두 배인 새 배열이 만들어지고 이전 값이이 새 배열에 복사됩니다. 배열의 용량이 증가하므로 더 많은 객체를 추가 할 수 있습니다.
예, ArrayList는 배열을 사용하여 항목을 저장합니다.
용량을 지정하지 않고 ArrayList를 만들면 기본 시작 용량이 사용됩니다. 기본 시작 용량은 프레임 워크의 버전에 따라 달라질 수 있습니다. 프레임 워크 2의 경우 0으로 보입니다. 프레임 워크 1에서는 16이라고 생각합니다.
IL을 보면, ArrayList는 처음에는 빈 배열을 사용합니다. 값을 추가하면 배열이 4 개 항목으로 변경됩니다. 배열이 가득 찰 때마다 용량이 두 배가됩니다. – Joren
- 1. 의 ArrayList는
- 2. ASP.NET 캐스트의 ArrayList는
- 3. 의 ArrayList는 값이
- 4. $ array를 기반으로 한 행 표시
- 5. Unichar Array를 단일 NSString으로 변환하려면
- 6. ls에서 Array를 만드는 Bash 스크립트?
- 7. C# Array를 XML로 변환하는 방법
- 8. 해시 맵에서 Array를 읽는 방법?
- 9. DOMElement Array를 jQuery Object로 변환
- 10. Ruby에서 다른 Array에서 하나의 Array를 빼는 것
- 11. JSTree : Node-Array를 자식으로 노드에 동적으로 추가하기
- 12. 효율적으로 MIPS Int Array를 인쇄하는 방법
- 13. C++에서이 2D Array를 삭제하는 방법
- 14. URL 문자열에서 (유사) Array를 검색하려면 어떻게해야합니까?
- 15. 내 응용 프로그램 사용자 인 launch에서 Android arraylist는 비어 있습니다.
- 16. array를 Arraylist for dataProvider로 변환하는 중 문제가 발생했습니다.
- 17. 코어 데이터가 포함 된 NSMutable Array를 어떻게 필터링합니까?
- 18. 드루팔 (Drupal : 내 테마에서 $ content Array를 어디에서 얻을 수 있습니까?
- 19. 오라클의 bpelx : exec BPEL extension에서 Array를 사용하는 방법
- 20. arrays.xml 파일에서 String Array를 가져 오는 것에 대한 도움말
- 21. Ruby 객체에 'each'메소드를 어떻게 추가합니까 (아니면 Array를 확장해야합니까?).
- 22. Byte Array를 Action Script에서 Java Image로 변환하고 저장하십시오.
- 23. Array를 CanvasPixelArray로 변환하는 방법 또는 CanvasPixelArray 객체를 만드는 방법?
- 24. C# : SQL 데이터베이스에 Decimal Array를 저장할 수 있습니까?
- 25. Ruby를 사용하여 Array를 반복 할 때 빈 요소 건너 뛰기
- 26. list 또는 Entity에서 int [] Array를 (를) 검색하는 방법은 무엇입니까?
- 27. wcf 서비스는 업데이트 후 Observable Collection 대신 Array를 반환합니다.
- 28. Matlab과 같이 Java에서 Array를 조작 할 수 있습니까?
- 29. IEnumerable 또는 array를 포함하는 제약 조건, 인터페이스 또는 클래스가 있습니까?
- 30. NS (Mutable) Array를 클래스에 유지하는 중 오류가 발생했습니다.
왜 OO 프로그래밍의 한 가지 점은 캡슐화이므로 인터페이스를 사용하는 클래스의 내부를 알 필요가 없습니까? (평소대로 아무 것도 완벽하지 않고 지식이있는 이유가있다.) – Mark
@ 마크 : 캡슐화의 목적은 내부에서 일어나는 일을 완전히 잊어 버리는 것이 아닙니다. 그것은 내부에서 무슨 일이 벌어지는지를 아는 것이 아닙니다. 시스템의 내부를 이해하는 것은 항상 유용합니다. 당신의 논리에 따르면, LinkedList와 List 는 둘 다 똑같은 일을하기 때문에 필요하지 않습니다. –
@ 마크 - 영리한 사람들이하는 일을 어떻게하는지 알 수 있도록하는 것이 좋습니다. @rkrauter - 정말 알고 싶으면 .NET Framework 라이브러리 소스 코드 (예)를 살펴 보는 것이 좋습니다. http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx – AboutDev