C# 컬렉션(ArrayList,Queue,Stack,Hashtable)

728x90
  • 컬렉션(Collection)

- 데이터 저장, 검색, 기타 데이터 처리 특화

- 자료구조(Data Structure)

- 선언 방법, 참조 방법, 중요 메소드

  • ArrayList

- 배열과 비슷

- 크기가 유동적(동적)

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _095_ArrayList
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList arrList = new ArrayList();
            //Add 함수는 어떤 데이터형도 다 받을 수 있음(object)
            arrList.Add("Hello"); //Add(string name);
            arrList.Add(10f);  //Add(float num);
            
            for(int i = 0; i < 10; i++)
            {
                arrList.Add(i);
            }

            foreach(object data in arrList)
            {
                Console.WriteLine("arrList data : " + data);
            }

            //배열 데이터로 초기화
            Console.WriteLine("배열 데이터로 초기화");
            int[] arrData = { 100, 200, 300 };
            ArrayList arrCopyList = new ArrayList(arrData);

            foreach(object data in arrCopyList)
            {
                Console.WriteLine("arrCopyList data : " + data);
            }
        }
    }
}

 

  • Queue

- 순차적 데이터 처리

- FIFO(First In First Out)

- 게임에서 순차적 AI기능 구현

- Dequeue(). Enqueue(), Peek()

- 배열 데이터가 Enqueue로 들어와서 Dequeue로 데이터가 순차적으로 삭제된다

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _096_Queue
{
    class Program
    {
        static void Main(string[] args)
        {
            Queue queue = new Queue();

            queue.Enqueue("a");
            queue.Enqueue("b");
            queue.Enqueue("c");

            for (int i = 0; i < 10; i++)
            {
                queue.Enqueue(i);
            }
            Console.WriteLine("queue data : {0}", queue.Peek());

            while(queue.Count > 0)
            {
                Console.WriteLine("queue data : {0}, count : {1}", queue.Dequeue(), queue.Count);
            }
            //배열 데이터로 초기화
            Console.WriteLine("배열 데이터로 초기화");
            int[] arrData = { 100, 200, 300 };
            Queue queueCopy = new Queue(arrData);

            foreach(object data in queueCopy)
            {
                Console.WriteLine("queueCopy datat : " + data);
            }
        }
    }
}

 

  • Stack

순차적 데이터 처리

- LIFO(Last In First Out)

- 뒤로가기 기능 구현

- Push(), Pop(), Peek()

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _097_Stack
{
    class Program
    {
        static void Main(string[] args)
        {
            Stack stack = new Stack();
            stack.Push("a");
            stack.Push("b");
            stack.Push("c");

            for(int i = 0; i < 10; i++)
            {
                stack.Push(i);
            }
            Console.WriteLine("stack data : {0}", stack.Peek());

            while(stack.Count > 0)
            {
                Console.WriteLine("queue data : {0}, count : {1}", stack.Pop(),stack.Count);
            }
            //배열 데이터로 초기화
            Console.WriteLine("배열 데이터로 초기화");
            int[] arrData = { 100, 200, 300 };
            Stack stackCopy = new Stack(arrData);

            foreach(object data in stackCopy)
            {
                Console.WriteLine("stackCopy data : " + data);
            }
        }
    }
}

 

  • Hashtable

- 키와 값이 상으로 구성되는 데이터

- 탐색 속도가 빠르고 사용이 편리

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _098_Hashtable
{
    class Program
    {
        static void Main(string[] args)
        {
            Hashtable hasTable = new Hashtable();
            hasTable.Add("pos", 10);
            hasTable.Add("name", "Jack");
            hasTable["weight"] = 10.8f;

            foreach(object key in hasTable.Keys)
            {
                Console.WriteLine("key : {0}, data : {1}", key, hasTable[key]);
            }
            Console.WriteLine("");

            Hashtable hashTableCopy = new Hashtable()
            {
                ["pos"] = 100,
                ["name"] = "Jane",
                ["weight"] = 100.8f,
            };

            foreach(object key in hashTableCopy.Keys)
            {
                Console.WriteLine("key : {0}, data : {1}", key, hashTableCopy[key]);
            }
        }
    }
}

 

  • 인덱서

- 배열 or 컬렉션의 외부 접근

- 키워드 : get, set, return, value, this[int index]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _099_Indexer01
{
    class AA
    {
        private int[] num = new int[10];

        public int this[int index]
        {
            get { return num[index]; }
            set { num[index] = value; }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            AA aa = new AA();

            for(int i = 0; i < 10; i++)
            {
                aa[i] = i;
            }
            aa[0] = 1000;
            aa[1] = 100;

            for(int i = 0; i < 10; i++)
            {
                Console.WriteLine("aa[{0}] : {1}", i, aa[i]);
            }
        }
    }
}

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _100_Indexer02
{
    class AA
    {
        ArrayList arrayList = new ArrayList();

        public string this[int index]
        {
            get
            {
                if (index >= 0 && index < arrayList.Count)
                    return (string)arrayList[index];
                else
                    return null;
            }
            set
            {
                if (index >= 0 && index < arrayList.Count)
                    arrayList[index] = value;
                else if (index == arrayList.Count)
                    arrayList.Add(value);
            }
        }
        public int count
        {
            get { return arrayList.Count; }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            AA aa = new AA();
            for(int i = 0; i < 10; i++)
            {
                aa[i] = string.Format("{0}", i);
            }
            aa[0] = "Hello";
            aa[1] = "World";
            aa[10] = "!!!!";

            for (int i = 0; i < aa.count; i++)
            {
                Console.WriteLine("aa : " + aa[i]);
            }
        }
    }
}

728x90