2025-04-25
자료를 순서대로 저장
→ 배열(Array) | 리스트(List)
자료를 순서에 따라 연결하는 구조
인덱스로 자료를 읽을 수 있다.
ArrayList Stack Queue LinkedList<T> List<T> Stack<T> Queue<T>
키(Key) - 값(Value)
→ 맵(Map) | 딕셔너리(Dictionary)
고유 Key에 대응하는 자료가 연동되는 구조
키가 서로 중복되지 않아야 한다.
키를 인덱스로 삼아 자료를 읽는다.
Dictionary<T,V> SortedList<T,V> KeyValuePair<T,V>
집합구조
→ 집합(Set)
자료를 순서 없이 저장한다.
동일한 자료는 한 개만 존재하고, 중복 허용 하지 않는다.
수학의 집합과 유사하다.
HashSet<T> SortedSet<T>
계층형
→ 트리(Tree) | 그래프(Graph)
자료가 하위자료를 갖는 계층적 구조
연결 경로에 따라 자료를 저장하고 이동하여 읽을 수 있다.
int x0 = 1;
int x1 = 2;
int x2 = 3;
int x3 = 4;
int x4 = 5;
⬇
int[] x = new int[5];
for(int i=0; i<5; i++)
{
x[i] = i + 1;
}
int SBS = 6;
int KBS2 = 7;
int KBS1 = 9;
int EBS1 = 10;
int MBC = 11;
Console.WriteLine("television networks: {0}, channel number: {1}", "SBS", SBS);⬇
표를 프로그램에 저장해놓고, 방송국의 이름을 이용해 채널 번호를 찾울 수 있도록 구현한다.
방송국 이름을 인덱스처럼 사용할 수 있는 배열 channels[]
channels["SBS"] = 6;
Console.WriteLine("television networks: {0}, channel number: {1}", "SBS", channels["SBS"]);
ArrayList SortedList Hashtable Stack Queue NameValueCollection.NET은 다양한 컬렉션을 제공한다.System.Collections 클래스System.Collections.Generic 클래스System.Collections.Concurrent 클래스ArrayList : 필요에 따라 크기가 동적으로 증가하는 개체 배열Hashtable : 키의 해시코드에 따라 구성된 키값 쌍의 컬렉션Queue : FIFO 방식의 개체 컬렉션 (선입선출)Stack : LIFO 방식의 개체 컬렉션 (선입후출)SortedList : 키에 따라 정렬된 키/값 쌍의 컬렉션Dictionary : 키에 따라 구성도니 키/값 쌍의 컬렉션HashSet : 값 집합Linkedlist<T> : 이중 연결 목록List<T> : 순서가 있어서 인덱스로 액세스할 수 있는 개체 목록Queue<T> : 선입선출 (FIFO)SortedList<TKey,TValue> : 연관된 IComparer<T> 구현을 기반으로 키에 따라 정렬된 키ㅣ/값 쌍의 컬렉션Stack<T> : 선입후출(LIFO)pubilc class SoretdList: IDictionary, ICollection, IEnumerable, IConeableQueue queue = new Queue(new object[] {10, 20, 30});
queue.Enqueue(1);
queue.Enqueue("abc");
queue.Enqueue(3.4);
foreach(object obj in queue)
Console.WriteLine(obj);
while(queue.Count > 0)
{
Console.WriteLine("Dequeue: {0} Count: {1}",
queue.Dequeue(), queue.Count);
}
출력 결과 : 10 20 30 1 abc 3.4
Stack stack = new Stack(new object[] {10, 20, 30});
stack.Push(1);
stack.Push("abc");
stack.Push(3.4);
foreach(object obj in stack)
Console.WriteLine(obj);
while(stack.Count > 0)
{
Console.WriteLine("Pop: {0} Count: {1}",
stack.Pop(), stack.Count);
}
출력 결과 : 3.4 abc 1 30 20 10
ArrayList list = new ArrayList();
list.Add(10);
list.Add(20);
list.Add(30);
foreach(object obj in list)
Console.WriteLine(obj);
list.RemoveAt(1); // 1번 요소 제거
foreach(object obj in list)
Console.WriteLine(obj);
list.Insert(1, 25); // 1번 요소에 25 추가
foreach(object obj in list)
Console.WriteLine(obj);
⇒ 출력 결과 : 10 20 30 | 10 30 | 10 25 30
Hashtable ht = new Hashtable();
ht.Add(1, "Dooly");
ht.Add(3, "Heedong");
ht.Add(2, "Gildong");
ht[4] = "Tochi";
if(!ht.ContainsKey(5))
ht.Add(5, "Douner");
foreach(DictionaryEntry de in ht)
{
Console.WriteLine("Key={0} Value={1}",
de.Key, de.Value.ToString());
}
Console.WriteLine("After Remove Dooley);
ht.Remove(1); // 둘리 제거
foreach(DictionaryEntry de in ht)
{
Console.WriteLine("Key={0} Value={1}",
de.Key, de.Value.ToString());
}
⇒ 출력 결과 : 5, 4, 3, 2, 1 | 5, 4, 3, 2
정렬된 컬렉션이 아니기 때문에 넣은 순서대로 출력되지 않는다.
해시값 순서로 순회되기 때문에 넣은 순서와 출력순서가 다를 수 있다.
true를 반환한다.순서에 의존하는 IList와 달리 키와 값으로 대응시켜 데이터를 추출한다.
IsFixedSize 속성 : 컬렉션의 크기가 정해져 있는지 검사한다.
IsReadOnly 속성 : 컬렉션이 읽기 전용인지 확인한다.
Keys 속성 : 컬렉션 내의 모든 키를 나열한다.
Values 속성 : 컬렉션 내의 모든 값을 나열한다.
Add() : 키와 값을 전달하여 데이터를 컬렉션에 추가한다.
Clear() : 컬렉션의 모든 데이터를 제거한다.
Contains() : 특정 키가 데이터와 연관되어 있는지 검사한다.
GetEnumerator() : IDictionaryEnumberator를 반환한다.
Remove() : 삭제할 값의 키를 전달하여 데이터를 컬렉션에서 제거한다.