컬렉션9 : Hashtable 클래스 :: C# 인트로[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

C# 인트로
[1]
등록일:2008-03-27 20:01:22 (0%)
작성자:갤러리정
제목:컬렉션9 : Hashtable 클래스

7.9 Hashtable 클래스

 

Hashtable 클래스 ICollection을 구현하는 것은 아주 당연한 것입니다. 그리고, Hashtable의 가장 큰 특징은 바로 IDictionary를 구현하고 있다는 것입니다. 물론, 앞에서 살펴본 것과 같이 IDictionary ICollection을 상속받았기 때문에 컬렉션류의 대부분의 기능을 전부 구현하였다고 볼 수 있습니다. IDictionary의 대표 기능은 바로 데이터를 삽입하고 추출할 때 (Key)(Value)를 이용한다는 것입니다. IDictionary의 대표적인 예가 바로 Hashtable입니다.

 

Hashtable 클래스의 프로토타입

public class Hashtable : IDictionary, ICollection, IEnumerable, ISerializable, IDeserializationCallback, ICloneable

 

Hashtable은 빠른 검색을 목적으로 최적화된 IDictionary(사전) 구조로 되어 있습니다. 그리고, Hashtable IEnumerable 인터페이스 또한 구현하고 있기 때문에 사전식 검색뿐만 아니라 각각의 요소의 나열에도 아주 편리한 기능을 제공해 주고 있습니다.

 

해시테이블(Hashtable)

IDictionary 인터페이스의 대표적인 예

객체를 삽입할 때 특별한 키(Key)와 값(Value)을 같이 입력해야 한다.

 

Hashtable 클래스의 메서드

Add()

·   특정 키(Key)와 값(Value)을 가진 원소를 추가

Clear()

·   Hashtable 안에 있는 모든 객체를 제거

ContainsKey()

·   Hashtable에 어떤 특정 키가 존재하는지 알려준다.

ContainsValue()

·   Hashtblae에 어떤 특정 값이 들어 있는지 여부를 확인

CopyTo()

·   Hashtable에 있는 원소를 이미 존재하는 1차원 배열로 복사

GetEnumerator()

·   Hashtable을 위한 열거자(Enumerator)를 반환

Remove()

·   특정 Key와 관련 있는 원소를 삭제

 

다음 예에서 Hashtable 클래스의 메서드를 통해서 객체의 저장, 검색, 특정값 검색, 삭제하는 것을 알아보겠습니다.

 

&

SamplesHashtable.cs

Ü Hashtable을 테스트하는 예제

using System;
using System.Collections;

public class 
SamplesHashtable  {
  
public static void 
Main() {
    Hashtable myHT = 
new 
Hashtable();
    myHT.Add(
"First""Hello"
);
    myHT.Add(
"Second""World"
);
    myHT.Add(
"Third""welcome"
);
    myHT.Add(
"Four""!"
);
    Print(
"1. myHT 
전체목록:", myHT);


    bool IsContain= myHT.ContainsKey(
"First");
    Console.WriteLine(
"2. First 
키의 존재여부:" + IsContain);
    Console.Write(
"3. 
키값들만 출력\n\t");

    ICollection mykey = myHT.Keys; 
    foreach(object obj in mykey)
      Console.Write( 
"{0},", obj);


    Console.WriteLine();
    Console.Write(
"4. Value들만 출력\n\t");

    ICollection myval = myHT.Values; 
    foreach(object obj in myval)
      Console.Write( 
"{0},"
, obj);
    Console.WriteLine();
    myHT.Remove(
"Four");Print("5. 
데이터삭제:", myHT);
  } 
//main

  
public static void 
Print( String info, Hashtable myList )  {
    IDictionaryEnumerator myEnumerator = myList.GetEnumerator();
    Console.Write(info + 
"\n\t"
);
    
while 
( myEnumerator.MoveNext() )
      Console.Write(
"{0}:{1}, "
, myEnumerator.Key, myEnumerator.Value);
    Console.Write(
"  
요소의 갯수:" + myList.Count + "\n");
  }
//class

C:\C#Example\07>csc SamplesHashtable.cs

C:\C#Example\07>SamplesHashtable

1. myHT 전체목록:

        Third:welcome, Second:World, Four:!, First:Hello,   요소의 갯수:4

2. First 키의 존재여부:True

3. 키값들만 출력

        Third,Second,Four,First,

4. Value들만 출력

        welcome,World,!,Hello,

5. 데이터삭제:

        Third:welcome, Second:World, First:Hello,   요소의 갯수:3

 

먼저, Hashtable 클래스 객체를 생성한 후 4개의 객체를 삽입하고 있습니다. 이 때 사용되는 메서드는 Add()이며 Add() 메서드의 첫번째 매개변수는 (Key)로 이용되며 두번째 매개변수는 (Value)으로 이용됩니다.

 

Hashtable myHT = new Hashtable(); //해시테이블의 생성

myHT.Add("First", "Hello");

myHT.Add("Second", "World");

myHT.Add("Third", "welcome");

myHT.Add("Four", "!");

 

Hashtable 클래스 내에 존재하는 특정 키(Key)를 포함하고 있는지 확인하기 위해서 ContainsKey() 메서드를 이용합니다. 해당 키가 있을 때는 true를 아니면 false를 반환합니다.

 

bool IsContain= myHT.ContainsKey("First");

 

Hashtable에서 키(Key)나 값(Value) ICollection 형태로 얻어내기 위해서는 Keys Values 속성을 이용합니다. 이 때 반환되는 속성의 형은 ICollection이기 때문에 foreach를 구현하여 데이터를 추출해 볼 수 있습니다.

 

ICollection mykey = myHT.Keys; //Hastatable (Key) 얻기

foreach(object obj in mykey)

       Console.Write( "{0},", obj);

ICollection myval = myHT.Values; //Hashtable (Value) 얻기

foreach(object obj in myval)

       Console.Write( "{0},", obj);

 

데이터를 삭제할 때에는 Remove() 메서드를 이용합니다. 다음은 Hashtable 내에서 키가 "Four"인 것을 삭제하게 됩니다.

 

myHT.Remove("Four")

 

Hashtable에서 모든 데이터를 검색할 때는 속성이나 IEnumerator를 이용하는 것 보다 오히려 IEnumerator IDictionary 성질을 동시에 지니고 있는 IDictionaryEnumerator 인터페이스를 이용합니다. 이 때 HashtableGetEnumerator() 메서드를 통해서 IDictionaryEnumerator 객체를 얻어 냅니다.

 

IDictionaryEnumerator myEnumerator = myHT.GetEnumerator();

while ( myEnumerator.MoveNext() )

       Console.WriteLine("\t{0}:\t{1}", myEnumerator.Key , myEnumerator.Value );
[본문링크] 컬렉션9 : Hashtable 클래스
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=3050
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.