공부/인프런 - Rookiss

Part 1-6-2. 자료구조 : List

셩잇님 2023. 8. 3. 14:33
반응형

 

 

List (동적 배열 = 가변적 크기의 배열)

 

C#에서의 List는 동적 배열이며, 크기가 고정적이지 않으며 가변적이다. C++에서 vector 와 같은 존재이다.

  • using System.Collections.Generic;을 해주어야 사용이 가능하다.
  • 리스트 또한 클래스이기 때문에 new를 사용하여 생성해야 하며 List 타입의 객체를 생성하면 참조를 하게 된다는 의미가 된다.

 

using System.Collections.Generic;

List<int> list = new List<int>();  // 빈 상태
  • 정적 배열과 마찬가지로 빈 상태일 때 없는 인덱스에 접근하면 런타임 에러 예외가 발생한다.
  • 중간 삽입, 중간 삭제가 효율적이지 않다. 왜냐하면 뒤에 있는 원소들이 전부 다 한 칸씩 밀리거나 앞으로 땡겨야 하기 때문이다. 그 과정에서 사본을 생성해야 하는 일도 발생.
  • 그 대신 임의 접근은 굉장히 빠르다. 인덱스로 접근하기 때문에!

 

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의 끝에다가 새로운 원소를 추가한다. 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 : 인덱스로 삭제

 

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();  // 리스트 내의 모든 원소를 싸그리 지운다.

 

 

 

 
반응형