简单的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. 17.4---返回max,不用if

    思路:借助max公式就可以了.max(x,y)=0.5*(x+y+|x-y|) 注意:1,结尾要加(int). 答案: max(x,y)=0.5*(x+y+|x-y|)

  2. 转:SQL子句的执行顺序

    SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后 ...

  3. UINavigationItem UINavigationBar 关系分析

    目录 1.关系分析 2.关系综述 3.概念点 4.疑问 1.关系分析 UIBarItem-> UIBarButtonItem -> UINavigationItem 1.1 UIBarIt ...

  4. 【GoLang】深入理解slice len cap什么算法? 参数传递有啥蹊跷?

    先上结论 .内置append函数在现有数组的长度 < 时 cap 增长是翻倍的,再往上的增长率则是 1.25,至于为何后面会说. .Go语言中channel,slice,map这三种类型的实现机 ...

  5. CentOS卸载OpenJDK并安装Sun JDK

    第一步:查看Linux自带的JDK是否已安装 (卸载centOS已安装的1.4) 安装好的CentOS会自带OpenJdk,用命令 java -version ,会有下面的信息: java versi ...

  6. centos6.5 tomcat开机启动

    可参考:centos6.5 nginx开机启动 /etc/init.d/下添加tomcatd文件,内容如下: #!/bin/sh # # chkconfig: - # # Licensed to th ...

  7. linux自动定时备份web程序和mysql数据库

    前些天受朋友说linux定时备份不知道怎么搞,叫帮忙处理一下.由于这段时间正闲着,所以也就欣然答应.由于朋友对linux不懂也希望我将操作的过程记录下来,也就是越详细越好.所以写得比较$%^& ...

  8. linux下QT Creator常见错误及解决办法

    最近因为在做一个关于linux下计算机取证的小项目,需要写一个图形界面,所以想到了用QT来写,选用了linux下的集成开发环境QT Creator5.5.1,但刚刚安装好,竟然连一个"hel ...

  9. oracle定时器,调用存储过程,定时从n张表中取值新增到本地一张表中

    --创建新增本地数据库的存储过程create or replaceprocedure pro_electric_record as  begin    insert into electric_met ...

  10. 【leetcode】 Unique Path ||(easy)

    Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...