C# - ArrayList

양규빈·2023년 7월 10일
0

C# 공부

목록 보기
11/30

개요

C#에서 ArrayList은 가변 크기의 배열을 나타내는 동적 배열 클래스이다.
ArrayList은 System.Collections 네임스페이스에서 제공된다.
이 클래스는 배열과 유사하지만 크기를 동적으로 조정할 수 있는 장점이 있다.

Array처럼 값을 차곡차곡 추가하는 자료구조.

  • ArrayList는 참조를 쉽게 할 수있다는 장점이 있다.
  • 삭제기능이 편리하다.

ArrayList의 주요 특징은 아래와 같다.

  • 가변크기 : 초기에 크기를 지정할 필요 없이, 동적으로 데이털르 추가하거나 제거할 수 있다.
    크기를 조정하기 위해서 내부적으로 메모리를 재할당하고 요소를 복사하는 작업이 발생한다.
  • 임의접근 : ArrayList은 인덱스를 사용하여 요소에 직접 액세스 가능하다. 따라서 임의 위치에 있는 요소를 검색하거나 수정하는 데 유리하다.
  • 여러 유형 저장 가능 : ArrayList는 다양한 유형의 객체를 저장할 수 있다. 객체나 값 형식 또는 다른 컬렉션 등을 저장 가능하지만, 요소를 추가할 때 박싱과 언박싱 과정이 필요하다.
  • 타입 안정성 없음 : ArrayList는 제네릭이 아니므로, 요 소를 추가할 때 타입 검사가 수행되지 않는다. 따라서 잘못된 유형의 요소를 추가하여 런타임 에러를 일으킬 수 있다.

ArrayList와 List의 차이점

타입 안정성

  • ArrayList : 객체의 배열을 저장하므로 모든 유형의 객체를 저장할 수 있다. 하지만요소를 추가할 때 내부적으로 박싱(boxing)과 언박싱(unboxing)이 발생한다.
  • List : List는 제네릭 타입으로 선언되며, 특정 유형(T)의 요소만 저장할 수 있다. 따라서 박싱과 언박싱이 필요하지 않으므로, 퍼포먼스에서 더 우위에 있다.
    또한, 컴파일 타임에 타입 검사를 수행하므로 타입 안정성이 높다.

성능

  • ArrayList : ArrayList은 요소 추가 및 제거 시에 내부적으로 배열의 재할당과 요소 복사가 발생할 수 있다.
    이는 성능에 영향을 줄수 있으며, 또한 박싱과 언박싱으로 인해 성능 저하가 발생한다.
  • List : List는 배열을 기반으로 동작하며, 내부적으로 요소의 추가 및 제거에 대한 최적화가 이루어져 있다.
    제네릭 타입을 사용하고 박싱과 언박싱이 없기 때문에, ArrayList보다 성능이 우수하다.

사용법

  • ArrayList : ArrayList은 System.Collections 네임스페이스에서 제공된다. 모든 유형의 객체를 저장할 수 있으며, 요소는 object 타입으로 다루어진다.
  • List : List은 System.Collections.Generic 네임스페이스에서 제공된다.


코드 및 세부 설명

① 리스트명.Remove(삭제할 데이터)
삭제 시에 정렬을 다시해야하기 때문에, 부하가 있을 수 있다.


② 리스트명.RemoveAt(데이터 위치)
삭제할 데이터의 위치를 참조하여, 제거한다.


③ 리스트명.RemoveRange(인덱스 시작, 인덱스 끝)
인덱스를 참조하여, 해당 범위를 제거한다.


④ 리스트명.Insert(인덱스, 데이터)
: 해당 위치에 데이터를 입력한다, insert 역시도 값을 넣을 때, 정렬을 해야하므로 부하가 클 수 있다.
리스트명.Add(데이터)
: 데이터를 추가하는 함수.


⑤ 리스트명.Count
: 해당 어레이 리스트의 크기를 인트형으로 반환한다.


⑥ 리스트명.Reverse() // 리스트명.Reverse(인덱스 시작, 인덱스 끝)
: 해당 리스트의 데이터 순서를 뒤바꾼다. // 리버스 시작점과 종료점을 설정하여 바꿀 수 있다.


⑦ 리스트명.Sort()
: 리스트를 내림차순으로 정렬한다.

Sort()함수에는 사용자가 정의한 comparar를 파라미터로 입력받을 수 있다.
위 코드는, 오름차순으로 정렬하게 만드는 Comparar이다.

비단, 오름차순 뿐만 아니라. 특정 조건(Key값)을 이용하여 정렬할 수도 있다.

기존의 Sort함수는 내림차순으로만 정렬하나,
파라미터를 입력받아 오름차순을 받을 수 있다.

단,
Sort된 함수를 Reverse를 이용하여, 오름차순으로 바꿀 수 있다.

⑧ 리스트명.BinarySearch()
: 데이터의 인덱스를 반환하는 함수.
바이너리 서치를 사용하기 전에는 반드시 Sorting이 완료된 상태여야 한다.
즉, Sort()함수를 선행하여 사용한 후에, BinarySerch를 사용한다.
리스트 내에 찾는 값이 없다면, -1을 반환한다.


Enumerator가 어레이 리스트의 시작점을 찾아줌. 무브를 이용하여, 다음 값, 다음 값을 불러옴


⑩ 리스트명.Contains(데이터)
리스트 내에 데이터가 있는지 탐색하는 함수.
값이 있다면 true 없다면 false로 나타낸다.


⑪ArrayList역시 배열 등을 바로 초기화 할 수 있다.

  • Array(배열)은 컴파일 타임에 미리 데이터 크기를 지정(변경이 불가)
  • ArrayList는 가변적으로 런타임에 크기를 변경할 수 있다.
  • 장점 :크기를 자유롭게 늘려서 사용 가능, 탐색이 빠름(인덱스가 있기때문에, 또한 BinarySerch_이진탐색을 지원해줌).
profile
훌륭한 개발자를 꿈꾸는 중입니다

0개의 댓글