Array

Difference between Array, ArrayList, List

Array

int [] Array = new int [5];
  • 특정 타입에 대해 고정된 크기의 배열

ArrayList

ArrayList arrayList = new ArrayList();
arrayList.Add(5);
arrayList.Add("asdf");
  • object인 Non Generic
  • 고정되지 않은 크기의 배열
  • Boxing, Unboxing 발생

List

List<int> list = new List<int>();
list.Add(5);
  • Generic
  • 고정되지 않은 크기의 배열
  • Boxing, Unboxing 발생하지 않음

LinkedList

  • 실제 이중 LinkedList 구조를 사용한 배열

SortedList

  • Map ADT 타입으로 배열 구조를 차용
  • 내부에 Key로 Sort된 배열이 있음
    • 이진 검색이 가능하고, O(log n)의 검색시간 소요

SortedList와 Dictionary와의 차이?

  • Dictionary는 Key값으로 Sort하지 않는다
  • Dictionary는 O(1)의 탐색 소요시간을 지향한다
    • SortedList는 이진탐색을 사용한다

Multidimensional Array

int [ , ] array;
int [ , , ] array;
int [ , , , ] array;
int [ , , , , ] array;

int [ , ] array = new int[3][2]{
  {1, 2},
  {3, 4},
  {5, 6},
}

int [ , ] array = {
  {1, 2},
  {3, 4},
  {5, 6},
}
  • NxM 배열, 다차원 배열을 사용할 때 선언

Jagged array

// 2개의 array를 가질 수 있음
int[][] jArray1 = new int[2][]; 

// 할당하는 array의 사이즈가 달라도 무방
jArray1[0] = new int[3]{1, 2, 3};
jArray1[1] = new int[4]{4, 5, 6, 7 };

// 혹은 아래와 같이 초기화도 가능
int[][] jArray1 = new int[2][]{
                new int[3]{1, 2, 3},
                new int[4]{4, 5, 6, 7}
            };

// 3개의 multidimensional array를 가질 수 있음
int[][,] jArray2 = new int[3][,]; 
  • 배열의 배열
  • 각 배열은 다른 길이일 수 있고, 저마다의 memory block을 보유
  • 맨 첫 index의 사이즈를 제외하고는 정의할 수 없다
    • 다른 길이의 배열을 포함할 수 있기 때문

Jagged vs. Multidimensional

  • CLR이 1차원 배열 접근에 효율적으로 최적화하기 때문에, 동일한 사이즈의 multidimensional array보다 jagged array가 더 빠른 퍼포먼스를 보인다.
  • https://stackoverflow.com/a/19640026
    • IL 코드 분석이 아닌 컴파일 어셈블리 분석으로 봤을 때 큰 차이를 확인하기 어렵다는 것 같다

출처