C#프로그래밍 13 : 컬렉션(ArrayList, Queue, Stack, Hashtable)

LeeWonjin·2022년 5월 10일
0

[학부]C#프로그래밍

목록 보기
13/21

개요

같은 성격을 띈 데이터들을 담는 자료구조로, ICollection 인터페이스를 상속받는다.
** 배열 또한 컬렉션의 일종

using System.Collections로 바로 각 클래스 접근가능.

ArrayList

배열과 가장 닮은 커렉션. []연산자로 요소 접근 및 수정.

배열과 다른 점
→ 초기 용량 설정 필요없음. 자동적으로 할당크기가 증가/감소함.

주요 메소드

  • Add() : 맨 뒤에 새 요소 삽입
  • RemoveAt() : 특정 인덱스의 요소 제거
  • Insert() : 특정 인덱스에 새 요소 삽입.

선언

ArrayList list = new ArrayList()

초기화

  • 배열을 인수로 초기화
bool[] arr = new bool[] { true, true, false, true };
ArrayList list = new ArrayList(arr);
  • 컬렉션 초기자로 초기화
ArrayList list = new ArrayList() { 1, 2, 3 };

사용예시

public static void Main(string[] args)
{
    ArrayList list = new ArrayList();
    list.Add(10); // 현재 원소 10
    list.Add(20); // 현재 원소 10 20
    list.Add(30); // 현재 원소 10 20 30

    list.Insert(1, 99); // 현재 원소 10 99 20 30
    list.RemoveAt(2); // 현재 원소 10 99 30

    for (int i = 0; i < list.Count; i++)
    {
        Console.Write($"{list[i]} "); // 10 99 30
    }
    Console.WriteLine();
    foreach (int i in list)
    {
        Console.Write($"{i} "); // 10 99 30
    }
    Console.WriteLine();

    list.Add("aaa");
    list.Add(0.5353);

    foreach (object o in list)
    {
        Console.Write($"{o} "); // 10 99 30 aaa 0.5353
    }
}

Queue

입력은 뒤에서, 출력은 앞에서 이루어지는 자료구조

주요 메소드

  • Enqueue() : 맨 뒤에 새 항목 추가
  • Dequeue() : 맨 앞의 항목 출력 및 제거

선언

Queue que = new Queue();

초기화

int[] arr = { 1, 2, 3, 4, 5 };
Queue que = new Queue(arr);

사용예시

static public void Main(string[] Args)
{
    Queue que = new Queue();
    que.Enqueue(1);
    que.Enqueue('a');
    que.Enqueue(false);

    foreach(object el in que)
    {
        Console.Write($"{el} "); // 1 a False
    }
    Console.WriteLine();
    Console.WriteLine($"element count : {que.Count}"); // element count : 3

    while (que.Count > 0)
    {
        Console.Write($"{que.Dequeue()} "); // 1 a False
    }
    Console.WriteLine();
    Console.WriteLine($"element count : {que.Count}"); // element count : 0
}

Stack

선입후출(FILO) 자료구조

주요 메소드

  • Push()
  • Pop()

선언

Stack stack = new Stack();

초기화

char[] arr = new char[] { 'a', 'b', 'c', 'd' };
Stack stack = new Stack(arr);

사용 예시

public static void Main(string[] args)
{
    Stack s = new Stack();
    s.Push('a');
    s.Push('b');
    s.Push(1);
    s.Push(0.5353);
    s.Push(false);

    while (s.Count > 0)
        Console.Write($"{s.Pop()} "); // False 0.5353 1 b a
}

Hashtable

key-value 쌍으로 이루어진 데이터의 모음

해싱

key를 이용해 value가 있는 주소값을 즉시 계산해내어 데이터에 접근 (배열 접근속도에 준함)
키는 어떤 자료형이라도 사용 가능

선언

Hashtable ht = new Hashtable();

초기화

  • 딕셔너리 초기자
Hashtable ht = new Hashtable()
{
    ["name"] = "wonjin",
    ["gender"] = "male",
    ["age"] = 25
};
  • 컬렉션 초기자
Hashtable ht = new Hashtable()
{
    { "name", "wonjin" },
    { "gender", "male" },
    { "age", 25 }
};

사용예시

static public void Main(string[] Args)
{
    Hashtable ht = new Hashtable()
    {
        { "name", "wonjin" },
        { "gender", "male" },
        { "age", 25 }
    };
    ht.Add("major", "computer engineering");
    ht["job"] = "student";

    Console.WriteLine(ht["name"]); // wonjin
    Console.WriteLine();

    ICollection keys = ht.Keys;
    foreach(string key in keys)
    {
        Console.WriteLine(ht[key]);
        /*
        wonjin
        25
        computer engineering
        student
        male
        */
    }
}
profile
노는게 제일 좋습니다.

0개의 댓글