ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Hashtable
    예전 글들/.NET, C# 2010. 9. 9. 13:57
    반응형
    해시 클래스가 상속받은 것들
    [SerializableAttribute]
    [ComVisibleAttribute(true)]
    public class Hashtable : IDictionary, ICollection, IEnumerable, ISerializable, IDeserializationCallback, ICloneable

    Hashtable 클래스는 키의 해시 코드에 따라 구성되는 키/값 쌍의 컬렉션을 나타냄

    Hashtable openWith = new Hashtable();
    openWith.Add([object key], [object value]);            // 이것만 봐도 알겠군

    컬렉션에 저장된 키의 해시 코드에 따라 내부적으로 객체를 저장하는 방법을 통하여 이름을 얻는다.

    openWith.ContainsKey([key])         // key 값이 포함 되있는지 확인하는 함수

    - 특정키와 연결된 해시 버킷(Hash bucket)은 키에 대한 해시 코드에 따라서 결정
    1. 만약 두 키가 같은 해시 코드를 가지고 있다면, 두키는 항상 같은 해시 버킷으로 보내짐
    2. 키를 계속해서 조회하는 경우 해당키의 해시코드를 사용하여 특정 버킷 하나에서만 검색하므로 실제로 특정 요소를 찾는 데 필요한 키 비교 횟수가 줄어든다.

    - 너무 많은 충돌이 발생하면 검색이 순차 검색과 비슷하고 컬렉션에 새로운 항목을 추가하는 작업이 증가하기 때문에 수행 능력을 떨어뜨릴 수 있다.
    1. Hashtable 로드 비율을 키에 대한 해시 버킷의 비율을 조절
    1) 키의 수가 로드 비율을 초과하면 해시 버킷의 수가 증가
    2) 로드 비율은 반드시 0.1과 1.0 사이이며 0.1은 가장 수행 능력이 좋고, 1.0은 가장 작은 메모리를 사용한다.
    3) Hashtable elements = new Hashtable(118, 0.1f)
    4) GetHashCode 메서드를 구현하면 충돌의 수행 능력을 엄청나게 향상 시킬 수 있다.
    2. 비효율적인 해시 코드보다 더 좋지 않은 경우는 해시 코드가 바뀌는 경우이다.
    1) 만약 Hashtable에 저장된 키가 수정되면 나중에 컬렉션에서 객체를 얻을 수가 없다.
    2) 만약 GetHashCode 메서드를 오버로드한다면 GetHashCode의 구현이 바뀌지 않는 값을 사용하거나 Hashtable에 저장된 키 값을 바꾸지 않아야 한다.



    참고 : MSDN에서 Hashtable 클래스 설명, PROGRAMMING MICROSOFT VISUAL C#.NET(정보문화사)
    반응형

    댓글

Designed by Tistory.