简单的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查找并删除相同文件-UNIQ File-wxPython-v6

    相比第一版,新增:菜单,对话框,文件过滤器,操作结果保存,配置功能(自己写了一个读写配置文件的功能),提示语优化,模块分化更合理. 截图: 源代码: UniqFile-wxPython-v6.py: ...

  2. visual studio 2012 插件

    下面来分享几个好用的插件:直接在Tools-Extensions and Updates-Online中搜索就可以安装了 (中文版位于:菜单-工具-扩展和更新-联机-Visual Studio库) 1 ...

  3. 在中文windows下使用pywinauto进行窗口操作

    这两天开始接触pywinauto,听说百度的自动化QA也用这个模块,于是来了兴趣,但网上的教程很少,而且基本上都是拿官方的notepad来说,首先中文菜单的支持是问题,其次各种操作也没有写清楚,阅读官 ...

  4. [Linux]非外网环境下配置lnmp心得

    1.安装gcc编译器 基本所有编译安装包都需要gcc编译器,而且编译安装gcc也需要一个编译器,这是一个悖论.所以,这里只能寻求rpm包安装.但是rpm包需要匹配特定的操作系统内核,所以没有一个通用的 ...

  5. 基础01 dos命令

    常见的dos命令: 盘符:        进入指定的盘下面. 操作文件夹:                   dir                                   列出当前控制 ...

  6. 数据库SQL语句

    增删改查 --增加 create INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) --删除 delete DELETE FROM 表名 ...

  7. GCD 大中枢派发 简单应用实例

    @interface ViewController () { UIImageView* iv; UIButton* btn; UILabel* lbl; } @end @implementation ...

  8. Urllib2 总结

    Urllib2 总结 介绍 Urllib2是用于获取URLs(统一资源定位符)的一个Python模块.它以urlopen函数的形式提供了非常简单的接口.能够使用各种不同的协议来获取网址.它还提供一个稍 ...

  9. PDO(数据访问抽象层)

    自带事务功能,多条sql同时执行时,如果其中一条执行失败,那么所有的都执行失败.开启了事务,可以进行回滚操作,让程序变得更安全. 1.访问不同的数据库2.自带事务功能3.防止SQL注入:分两次发送 / ...

  10. java操作数据库出错

    "无效的列索引"其实是个低级的错误 出错原因:1.sql串的?号数目和提供的变量数目不一致:例如:jdbcTemplate.update(sql, new Object[] {ne ...