c#/수업 내용

Hachtable 클래스와 기본 문제

이지훈26 2021. 9. 2. 16:19
using Hellowrold;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        //변수 선언
        Hashtable table;

        //컬렉션 초기화
        table = new Hashtable();

        //추가
        table.Add(100, "장검");
        Hero hero = new Hero("홍길동");
        table.Add("123-456", hero);
        table.Add(hero, 1234565);

        //처리되지 않은 예외: System.ArgumentException: 항목이 이미 추가되었습니다. 
        //사전에 있는 키: 'Hero'  추가되는 키: 'Hero'
        //table.Add(hero, 1234565);

        table.Add(1.23f, 2222f);
        table.Add(true, "A");

        //요소의 수
        Console.WriteLine("count: {0}", table.Count);

        //인덱스는 0, 1, 2, 3 가 아니라 키 값이다 !!!!!!!!!!!!!
        //인덱스로 가져온다
        object element = table[100];
        Console.WriteLine("element: {0}", element);

        //인덱스로 값을 넣을 수 있다
        table[100] = "단검";
        Console.WriteLine("-> " + table[100]);

        bool haskey = table.ContainsKey(100);
        Console.WriteLine("haskey: {0}", haskey);

        table.Remove(100);
        Console.WriteLine("count: {0}", table.Count);

        //foreach문을 통해서 반복할 수 있다
        //DIctionaryEntry에 key와 value값이 속으로 제공된다

        foreach (DictionaryEntry de in table)
        {
            Console.WriteLine("key: {0}, val: {1}", de.Key, de.Value);
        }

        foreach (object key in table.Keys)
        {
            Console.WriteLine("key: {0}", key);
        }

        foreach (object val in table.Values)
        {
            Console.WriteLine("val: {0}", val);
        }

    }
}

Hashtable 클래스

-키의 해시 코드에 따라 구성된 키/값 쌍의 컬렉션을 나타냄

ex) 
바코드 번호 - 물품 정보
주민번호 - 인적사항
   (키)          (값)


***검색이 매우 빠르다
네임 스페이스 : system.collections
키의 해시코드에 따라 구성된 키/값 쌍의 컬렉션이다
IEnumrable 구현했음 -> foreach 가능

사용전에 컬렉션을 초기화 한다
new Hachtable();

------------------------
속성

Count : 요소수를 반환한다 
Keys : ICollection타입으로 Hashtable에 있는 키들을 가져온다 -> foreach가능 
Values : ICollection타입으로 Hashtable에 있는 값들을 가져온다 -> foreach가능 

-------------------------
메서드

Add(Object, Object)메서드 사용
매개변수가 2개다
첫번째 매개변수 : key (키)
두번째 매개변수 : value (값)
key 값이 null일 경우 ArgumentNullException 발생
value 값 null을 허용한다

*** 중복된 키를 사용할 수 없다 ***
값은 중복되어도 된다

인덱스 값을 키값으로 해서 값을 읽고 쓸 수 있다
table[키] = 값
console.writeLine(table[키])
키 타입(objrct)은 어떤 것도 될 수 있다

containskey(키값)
키가 있으면 true
없으면 false

foreach문을 사용할 때 요소의 타입은 DictionaryEntry 구조체다
이 구조체는 key, value 속성을 가지고 있다

foreach( DictionaryEntry de in openWith )
Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);

데이터 삭제시 Remove(Object)메서드 사용 
매개변수 : key