SimpleHashTable
简单的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的更多相关文章
- .NET 2.0 参考源码索引
http://www.projky.com/dotnet/2.0/Microsoft/CSharp/csharpcodeprovider.cs.htmlhttp://www.projky.com/do ...
随机推荐
- 转:JQuery选择器
选择器是jQuery最基础的东西,本文中列举的选择器基本上囊括了所有的jQuery选择器,也许各位通过这篇文章能够加深对jQuery选择器的理 解,它们本身用法就非常简单,我更希望的是它能够提升个人编 ...
- 腾讯云环境配置之PHP5.6.3 + redis扩展 稳定版
腾讯云环境配置之PHP5.6.3 + redis扩展 稳定版 时间:2015-01-18 01:41来源:linux.it.net.cn 作者:IT #由于上文装过yum groupinstall ...
- Lua简易入门教程
环境:lua for windows (lfW)主页:http://luaforwindows.luaforge.net/https://code.google.com/p/luaforwindows ...
- Selenium FF WebDriver 遍历所有链接(另类爬虫)
请看这个页面,我想要找到某个公告的内容,必须一个一个打开链接,尼玛好多啊. 于是,我机智的使用selenium打开每一个链接,然后把公告内容写入txt 那需要做一下步奏 1.依次打开一个公告 2.切换 ...
- 1. javacript高级程序设计-JavaScript简介
JavaScript诞生于1995年,由Netscape公司布兰登·艾奇开发,JavaScript主要包括三个部分: (1). ECMAScript,由ECMA-262定义,提高核心语言功能 (2). ...
- js数组转置
<script type="text/javascript"> var arr=[[1,2,3],[4,5,6],[7,8,9],[17,18,19]]; ...
- ABAP 行列稳定刷新语句
DATA stbl TYPE lvc_s_stbl. stbl-row = 'X'." 基于行的稳定刷新 stbl-col = 'X'." 基于列稳定刷新 ...
- ubuntu apc 安装
在ubuntu下安装APC,只需要两条命令,便可将APC和php绑一起. 安装代码: sudo apt-get install -y apache2-prefork-dev ...
- codeforces 492C. Vanya and Exams 解题报告
题目链接:http://codeforces.com/problemset/problem/492/C 题目意思:给出 3 个整数:n, r, avg.然后有 n 行,每行有两个数:第 i 行有 ...
- code vs 1026 逃跑的拉尔夫
1026 逃跑的拉尔夫 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 年轻的拉尔夫开玩笑地从一个小镇上偷走 ...