2014년 2월 19일 수요일

28. [C#,닷넷컬렉션]ArrayList,Quque,HashTable(큐,해시테이블,Collection,닷넷자료구조)

28. [C#,닷넷컬렉션]ArrayList,Quque,HashTable(큐,해시테이블,Collection,닷넷자료구조)
 
대부분의 응용프로그램에서 개체의 그룹을 만들어 사용하는 경우들이 있는데 개체의 배열을 만들거나 개체의 컬렉션을 만들어 개체를 그룹화할 수 있다. 배열의 경우 개체를 고정된 수만큼 만들고 이러한 개체로 작업할 때 상당히 유용하며 컬렉션을 사용하면 배열보다는 더 유연하게 개체 그룹에 대해 작업할 수 있다.
:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 
배열과 달리 컬렉션에서는 응용 프로그램의 요구 변화에 따라 사용하는 개체의 그룹이 동적으로 증가하거나 줄어들 수 있으며 일부 컬렉션의 경우 키를 사용하여 개체를 빨리 검색할 수 있다.
 
 
1.     System.Collections.ArrayList
 
크기가 동적으로 증가하는 배열을 사용하도록 IList 인터페이스를 구현
 
 
using System;
using System.Collections;
public class SamplesArrayList
{
 
    public static void Main()
    {
        ArrayList onj = new ArrayList();
        onj.Add("Onj");
        onj.Add("OracleJava");
        onj.Add("Community");
 
        Console.WriteLine("onj List");
        Console.WriteLine("    Count:    {0}", onj.Count);
        Console.WriteLine("    Capacity: {0}", onj.Capacity);
 
        Console.Write(" onj  Values:");
        PrintValues(onj);
 
        ArrayList onj2 = (ArrayList)onj.Clone();
        Console.Write(" onj2 Values:");
        PrintValues(onj2);
 
    }
 
    public static void PrintValues(IEnumerable myList)
    {
        foreach (Object obj in myList)
            Console.Write("   {0}", obj);
        Console.WriteLine();
    }
 
}
 
 
 
[결과]
 
onj List
    Count:    3
    Capacity: 4
 onj  Values:   Onj   OracleJava   Community
 onj2 Values:   Onj   OracleJava   Community
 
 
 
2.     System.Collections.Quque
 
큐는 FIFO(First In First Out) 형태의 자료구조를 구현한 클래스로 메시지를 받은 순서대로 저장하는 데 유용하다. System.Collections.Quque 클래스는 큐를 순환 배열로 구현했는데 Queue 에 저장되는 개체들은 한쪽 끝에서 삽입되고 다른 쪽 끝에서 제거된다. 배열이나 리스트가 데이터에 자유롭게 접근하는 반면 큐는 입력은 오직 뒤(rear), 출력은 오직 앞(front)에서만 일어난다. 널 값을 허용하고 중복을 허용하는 자료구조 이다.
 
 
using System;
 using System.Collections;
 public class SamplesQueue  {
 
    public static void Main()  {
 
       // Creates and initializes a new Queue.
       Queue myQ = new Queue();
       myQ.Enqueue("Hello");
       myQ.Enqueue("World");
       myQ.Enqueue("!");
 
       // Displays the properties and values of the Queue.
       Console.WriteLine( "myQ" );
       Console.WriteLine( "\tCount:    {0}", myQ.Count );
       Console.Write( "\tValues:" );
       PrintValues( myQ );
    }
 
 
    public static void PrintValues( IEnumerable myCollection )  {
       foreach ( Object obj in myCollection )
          Console.Write( "    {0}", obj );
       Console.WriteLine();
    }
 }
 /*
 This code produces the following output.
 
 myQ
     Count:    3
     Values:    Hello    World    !
*/
 
 
3.     System.Collections.HashTable
 
(key), (value) 쌍으로 된 자료를 다루는 데 용이하다. 배열과 차이점이라면  배열이 자료에 접근하기 위해 인덱스를 사용하지만 해시테이블은 데이터베이스처럼 키 값을 사용한다는 것이다. 키 값은 어떤 형식도 가능하며 탐색 속고 또한 좋다. ArrayList에서 데이터 검색을 위해 이진탐색을 수행하거나 리스트를 순회하지만 HashTable은 키를 이용해 데이터를 빠르게 검색한다. 그러므로 키는 NULL값을 가질 수 없지만 값은 NULL일 수 있다.
 
using System;
using System.Collections;
 
class Example
{
    public static void Main()
    {
 
        Hashtable onj = new Hashtable();
 
        // Add some elements to the hash table. There are no
        // duplicate keys, but some of the values are duplicates.
        onj.Add("name", "오엔제이프로그래밍");
        onj.Add("tel", "02-851-4790");
        onj.Add("url", "www.onjprogramming.co.kr");
        onj.Add("addr", "서울 구로 디지털단지");
 
 
        try
        {
            onj.Add("tel", "IT 114");
        }
        catch
        {
            Console.WriteLine("키값 중복...");
        }
 
        // The Item property is the default property, so you
        // can omit its name when accessing elements.
        Console.WriteLine("For key = \"name\", value = {0}.", onj["name"]);
 
        onj["name"] = "오라클자바커뮤니티";
        Console.WriteLine("For key = \"name\", value = {0}.", onj["name"]);
 
 
        if (!onj.ContainsKey("who"))
        {
            onj.Add("who", "ONJSYSTEMS");
            Console.WriteLine("Value added for key = \"who\": {0}", onj["who"]);
        }
 
        // When you use foreach to enumerate hash table elements,
        // the elements are retrieved as KeyValuePair objects.
        Console.WriteLine();
        foreach (DictionaryEntry d in onj)
        {
            Console.WriteLine("Key = {0}, Value = {1}", d.Key, d.Value);
        }
    }
}
 
 
[결과]
 
키값 중복...
For key = "name", value = 오엔제이프로그래밍.
For key = "name", value = 오라클자바커뮤니티.
Value added for key = "who": ONJSYSTEMS
 
Key = url, Value = www.onjprogramming.co.kr
Key = addr, Value = 서울 구로 디지털단지
Key = tel, Value = 02-851-4790
Key = who, Value = ONJSYSTEMS

댓글 없음:

댓글 쓰기