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
Key = name, Value = 오라클자바커뮤니티
댓글 없음:
댓글 쓰기