简单的Hash Table 实现,下次被问到,至少不是从0开始。不过笔试问这个毕竟不多。

    public struct Item<K, V>
    {
        public K Key { get; set; }

        public V Value { get; set; }
    }

    public class SimpleHashTable<K, V>
    {
        private int _size;

        private LinkedList<Item<K, V>>[] _items;

        public SimpleHashTable(int size)
        {
            this._size = size;
            _items = new LinkedList<Item<K, V>>[_size];
        }

        public void Add(K key, V value)
        {
            var item = Find(key);
            if (item == null)
            {
                var list = FindListByKey(key);
                list.AddLast(new Item<K, V>()
                {
                    Key = key,
                    Value = value
                });
            }
            else
            {
                throw new Exception("The item is already exist.");
            }
        }

        public V Find(K key)
        {
            var list = FindListByKey(key);
            foreach (var item in list)
            {
                if (item.Key.Equals(key))
                {
                    return item.Value;
                }
            }

            return default(V);
        }

        public void Remove(K key)
        {
            var list = FindListByKey(key);
            var item = list.Where(a => a.Key.Equals(key)).FirstOrDefault();
            if (!item.Equals(default(Item<K, V>)))
            {
                list.Remove(item);
            }
        }

        private LinkedList<Item<K, V>> FindListByKey(K key)
        {
            var hash = key.GetHashCode();
            var index = Math.Abs(hash % _size);

            if (_items[index] == null)
            {
                _items[index] = new LinkedList<Item<K, V>>();
            }

            return _items[index];
        }
    }

SimpleHashTable的更多相关文章

  1. .NET 2.0 参考源码索引

    http://www.projky.com/dotnet/2.0/Microsoft/CSharp/csharpcodeprovider.cs.htmlhttp://www.projky.com/do ...

随机推荐

  1. python 类修饰器

    1. 修改类函数. 场景: 如果要给一个类的所有方法加上计时,并打印出来.demo如下: # -*- coding:utf-8 -*- import time def time_it(fn): &qu ...

  2. 【System】shell 实现 bat 的pause功能

    read -rsp $'Press enter to continue...\n' 参考资料: http://stackoverflow.com/questions/92802/what-is-the ...

  3. C#函数参数

    当函数接受参数时,必须指定下属内容 函数在其定义中指定参数列表,以及这些参数的类型 在每个函数调用中匹配参数列表 参数匹配:当调用函数时,必须使参数与函数定义中指定的参数完全匹配,这意味着要匹配参数的 ...

  4. 【leetcode】Unique Binary Search Trees II

    Unique Binary Search Trees II Given n, generate all structurally unique BST's (binary search trees) ...

  5. fib数列变种题目

    对一个正整数作如下操作:如果是偶数则除以2,如果是奇数则加1,如此进行直到1时操作停止,求经过9次操作变为1的数有多少个? 第9次操作:结果1由2产生.1个被操作数8:结果2只能由4产生.1个被操作数 ...

  6. 10. javacript高级程序设计-DOM

    1. DOM DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序接口) 1.1 节点层次 DOM可以将任何HTML和XML文档描绘成一个由多层节点构成的结构.节点分为几种不同的类型 ...

  7. MongoDB 副本集的相关概念【转】

    一.副本集基本概念 副本集(replica set) MongoDB的replica set是一个mongod进程实例簇,数据在这个簇中相互复制,并自动进行故障切换. MongoDB的数据库复制增加了 ...

  8. ASM:《X86汇编语言-从实模式到保护模式》1-4章:处理器,内存和硬盘基础

    其实很久之前就学完了实模式了,但是一直没有总结,感觉现在直接在书上做笔记的弊端就是有些知识点不能很很深刻地记下来(毕竟手写最明显的优点就是能深刻地记住知识,但是就是用太多的时间罢了).一下内容都是一些 ...

  9. 【XLL 文档翻译】【第3部分】必要的和有用的 C API XLM 函数

    本节中将介绍几个对于 DLL 和 XLL 开发人员来说十分重要的回调函数,xlfRegister 函数是可用于注册函数,使得 Excel 可以直接访问 DLL 和 XLl 中的函数. xlfUnreg ...

  10. IOS- 内存管理机制

    iOS平台内存常见问题 作为iOS平台的开发者,是否曾经为内存问题而苦恼过?内存莫名的持续增长,程序莫名的crash,难以发现 的内存泄漏,这些都是iOS平台内存相关的常见问题:本文将会详细介绍iOS ...