💻 Computer Science/Data Structure

[C#] Data Structure#04 | List(동적 배열)

Sugar0810 2023. 1. 15. 13:12

List(동적 배열)

C#에서 List는 동적 배열 = 가변적 크기의 배열(C++에선 vector와 같은 존재)

  • using System.Collections.Generic; using 선언 필수
  • 얘도 클래스이기 때문에 List 타입의 객체를 생성하면 참조를 하게 된다는 의미가 된다.
    • new를 사용하여 생성해야 함.
      using System.Collections.Generic;
      
    List list = new List(); // 빈 상태
  • 빈 상태일 때 없는 인덱스에 접근하면 런타임 에러 예외가 발생한다.
    • 이건 정적 배열(Array)도 동일
  • 중간 삽입, 중간 삭제가 효율적이지 않다.
    • 뒤에 있는 원소들이 전부 다 한 칸씩 밀리거나 앞으로 땡겨야 하기 때문이다. 그 과정에서 사본을 생성해야 하는 일도 발생
  • List의 접근법은 인덱스 접근이기 때문에 임의 접근은 굉장히 빠르다.

 

Count : 리스트 길이 리턴

List<int> list = new List<int>();
for (int i = 0; i < 5; i++)
    list.Add(i); // 0 1 2 3 4

Console.WriteLine(list.Count); // 5

함수 아니고 프로퍼티다.

 

Add : 후열 삽입

List<int> list = new List<int>();

list.Add(1); // 원소 1 을 추가.

List의 끝에다가 새로운 원소를 추가한다.(C++, vector.push_back())

 

Insert : 중간 삽입

List<int> list = new List<int>();

for(int i = 0; i < 5; i++)
    list.Add(i); // 0 1 2 3 4

list.Insert(2, 999); // 인덱스2 자리에 원소 999 추가 -> 0 1 999 2 3 4

 

Remove : 원소로 search하여 삭제

List<int> list = new List<int>();

for(int i = 0; i < 5; i++)
    list.Add(i); // 0 1 2 3 4

list.Add(3);  // 0 1 2 3 4 3
list.Remove(3);  // 0 1 2 4 3

인수로 넘긴 원소와 동일한 원소들이 있을 수 있지만 가장 처음 만난 원소를 삭제한다. 그리고 삭제에 성공하면 True 리턴, 해당 원소를 찾지 못했다면 False 리턴. bool타입을 리턴한다.

 

RemoveAt : Index로 삭제

List<int> list = new List<int>();

for(int i = 0; i < 5; i++)
    list.Add(i); // 0 1 2 3 4

list.RemoveAt(0);  // 1 2 3 4

인수로 넘긴 인덱스에 해당하는 원소를 삭제한다.

 

Clear : 원소를 전부 삭제 하여 리스트 비우기

list.Clear();  // 리스트 내의 모든 원소를 싸그리 지운다.

 


 

참고 사이트