반응형
C#에서는 자료구조 로써 해시테이블을 제공한다.
하지만, 그 구조에서는 동일 key값에 대한 예외처리가 되어 있지 않다.
chainning 방식 등이 사용되지 않기에, 동일 키 값은 에러를 발생시킨다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | using System; using System.Collections.Generic; using System.Linq; using System.Text; public class SimpleHashTable { private const int INITIAL_SIZE = 16; private int size; private Node[] buckets; public SimpleHashTable(int capacity) { this.size = capacity; this.buckets = new Node[size]; } public void Put(object key, object value) { int index = HashFunction(key); if (buckets[index] == null) { buckets[index] = new Node(key, value); } else { Node newNode = new Node(key, value); newNode.Next = buckets[index]; buckets[index] = newNode; } } public object Get(object key) { int index = HashFunction(key); if (buckets[index] != null) { for (Node n = buckets[index]; n != null; n = n.Next) { if (n.Key == key) { return n.Value; } } } return null; } public object Set(object key, object value) { int index = HashFunction(key); if (buckets[index] != null) { for (Node n = buckets[index]; n != null; n = n.Next) { if (n.Key == key) { n.Value = value; } } } return null; } public bool Contains(object key) { int index = HashFunction(key); if (buckets[index] != null) { for (Node n = buckets[index]; n != null; n = n.Next) { if (n.Key == key) { return true; } } } return false; } protected virtual int HashFunction(object key) { return Math.Abs(key.GetHashCode() + 1 + (((key.GetHashCode() >> 5) + 1) % (size))) % size; } private class Node { public object Key { get; set; } public object Value { get; set; } public Node Next { get; set; } public Node(object key, object value) { this.Key = key; this.Value = value; this.Next = null; } } } |
자료 참조 : http://www.csharpstudy.com/
반응형
'Language > C#' 카테고리의 다른 글
[C#] 문자열이 숫자인지 확인하는 방법 (0) | 2013.12.24 |
---|---|
[C#] 개체 참조가 개체의 인스턴스로 설정되지 않았습니다. [출처] C# : 오류 System.NullReferenceException: 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.(오류 System.NullReferenceException) (0) | 2013.12.14 |
[C#] 정규 표현식 기호표 (0) | 2013.12.11 |
[C#] String - IndexOf 함수 (0) | 2013.12.04 |
[C#] Singleton (싱글톤) (2) | 2013.12.04 |