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 코드 분석이 아닌 컴파일 어셈블리 분석으로 봤을 때 큰 차이를 확인하기 어렵다는 것 같다
출처
- https://www.tutorialsteacher.com/csharp/csharp-multi-dimensional-array
- https://www.tutorialsteacher.com/csharp/csharp-jagged-array
- https://stackoverflow.com/questions/4648914/why-we-have-both-jagged-array-and-multidimensional-array
- https://stackoverflow.com/questions/32020000/what-is-the-difference-between-an-array-arraylist-and-a-list/32020072
- https://namoeye.tistory.com/entry/C-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%A0%95%EB%A6%AC%EC%A2%80