본문 바로가기

개인공부/C#

[C#] 컬렉션(Collection)

 

■ 컬렉션(Collection) :

 - 개체를 그룹화하는 방법 중 하나

 - 컬렉션(System.Collections)에는 ArrayList, Queue, Stack, Hashtable 등을 지원

  * 컬렉션은 Object 형식 데이터를 저장, 컬렉션(System.Collections)은 박싱(Boxing), 언박싱(UnBoxing)이 발생하여

많이 사용하게 되면 성능 저하가 올 수 있음

  * 가능하면 컬렉션(System.Collections) 대신에 제네릭 컬렉션(System.Collections.Generic 또는 System.Collections.Concurrent) 사용

 

■ ArrayList :

 - 필요에 따라 크기가 동적으로 증가하는 개체 배열

 - 제네릭 컬렉션 List<T> 로 대체 사용

■ Example

// ArrayList
Console.WriteLine($"===== ArrayList Example =====");
ArrayList arrayList = new ArrayList();
arrayList.Add(10);
arrayList.Add(20);
arrayList.Add(30);
foreach (var item in arrayList)
    Console.WriteLine($"[arrayList] {item}");
            
arrayList.RemoveAt(1);

foreach (var item in arrayList)
    Console.WriteLine($"[arrayList] {item}");
Console.WriteLine();

// Generic Collection : List<T>
Console.WriteLine($"===== List<T> Example =====");
List<int> list = new List<int>();
list.Add(10);
list.Add(20);
list.Add(30);
foreach (var item in list)
    Console.WriteLine($"[list] {item}");

list.RemoveAt(1);

foreach (var item in list)
    Console.WriteLine($"[list] {item}");

 

Example 결과

 

 

■ Queue :

 - 선입선출(FIFO : First In First Out) 방식의 개체 컬렉션

 - 제네릭 컬렉션 Queue<T> 로 대체 사용

 

■ Example

// Queue
Console.WriteLine($"===== Queue Example =====");
Queue queue = new Queue();
queue.Enqueue(10);
queue.Enqueue(20);
queue.Enqueue(30);

Console.WriteLine($"[queue] {queue.Dequeue()}");
Console.WriteLine($"[queue] {queue.Dequeue()}");
Console.WriteLine($"[queue] {queue.Dequeue()}");
Console.WriteLine();

// Generic Collection : Queue<T>
Console.WriteLine($"===== Queue<T> Example =====");
Queue<int> g_queue = new Queue<int>();
g_queue.Enqueue(10);
g_queue.Enqueue(20);
g_queue.Enqueue(30);


Console.WriteLine($"[g_queue] {g_queue.Dequeue()}");
Console.WriteLine($"[g_queue] {g_queue.Dequeue()}");
Console.WriteLine($"[g_queue] {g_queue.Dequeue()}");

 

Example 결과

 

 

■ Stack :

 - 선입후출(FILO : First In Last Out) 방식의 개체 컬렉션

 - 제네릭 컬렉션 Stack<T> 로 대체 사용

■ Example

// Stack
Console.WriteLine($"===== Stack Example =====");
Stack stack = new Stack();
stack.Push(10);
stack.Push(20);
stack.Push(30);
            
Console.WriteLine($"[stack] {stack.Pop()}");
Console.WriteLine($"[stack] {stack.Pop()}");
Console.WriteLine($"[stack] {stack.Pop()}");
Console.WriteLine();

// Generic Collection : Stack<T>
Console.WriteLine($"===== Stack<T> Example =====");
Stack<int> g_stack = new Stack<int>();
g_stack.Push(10);
g_stack.Push(20);
g_stack.Push(30);

Console.WriteLine($"[g_stack] {g_stack.Pop()}");
Console.WriteLine($"[g_stack] {g_stack.Pop()}");
Console.WriteLine($"[g_stack] {g_stack.Pop()}");

 

Example 결과

 

 

■ Hashtable :

 - 키(Key)와 값(Value) 쌍의 요소로 구성된 사전 형식의 컬렉션

 - 키(Key)를 이용해 빠른 검색 제공

 - 제네릭 컬렉션 Dictionary<TKey, TValue> 로 대체 사용

 

 

■ Example

// Hashtable
Console.WriteLine($"===== Hashtable Example =====");
Hashtable hashtable = new Hashtable();
hashtable.Add("AA", 100);
hashtable.Add("BB", 200);
hashtable.Add("CC", 300);
            
Console.WriteLine($"[hashtable] {hashtable["AA"]}");
Console.WriteLine($"[hashtable] {hashtable["BB"]}");
Console.WriteLine($"[hashtable] {hashtable["CC"]}");
Console.WriteLine();

// Generic Collection : Dictionary<TKey, TValue>
Console.WriteLine($"===== Dictionary<TKey, TValue> Example =====");
Dictionary<string, int> dictionary = new Dictionary<string, int>();
dictionary.Add("AA", 100);
dictionary.Add("BB", 200);
dictionary.Add("CC", 300);

Console.WriteLine($"[dictionary] {dictionary["AA"]}");
Console.WriteLine($"[dictionary] {dictionary["BB"]}");
Console.WriteLine($"[dictionary] {dictionary["CC"]}");

 

Example 결과