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 ...
随机推荐
- 7.2---蚂蚁相遇问题(CC150)
public class Ants { public double antsCollision(int n) { // write code here return (1 - Math.pow(0.5 ...
- thinkphp save()方法没有数据,保存失败解决办法
thinkphp save()方法没有数据保存返回0,保存失败返回false 可以对返回值判断一下就好 $ret = $model->save($data); //var_dump($ret ...
- 3D音效
摘自:http://baike.baidu.com/view/1330437.htm?fr=aladdin 3D音效就是用扬声器仿造出似乎存在但是虚构的声音.例如扬声器仿造头顶上有一架飞机从左至右飞过 ...
- css3 transition effect(其它效果)
http://blog.csdn.net/jerryvon/article/details/8755548 整理了一些其它动画,用的模板为flip模板,只不过CSS3不同 /************* ...
- Thinkphp .htaccess 与 httpd.ini文件重定向转换问题
.htaccess 文件内容 RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !- ...
- etcd相关资料
<1>etcd:从应用场景到实现原理的全方位解读 http://www.infoq.com/cn/articles/etcd-interpretation-application-scen ...
- ADO.NET中的五个主要对象
Connection:主要是开启程序和数据库之间的连接.没有利用连接对象将数据库打开,是无法从数据库中取得数据的.Close和Dispose的区别,Close以后还可以Open,Dispose以后则不 ...
- android studio从1.5更新到2.0后terminal无法运行gradle命令,提示无法找到gradle命令
android studio从1.5更新到2.0后terminal无法运行gradle命令,提示无法找到gradle命令. 'gradle' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 设 ...
- Unity3d 检查哪些prefab引用了某个UIAtlas
适用情景:策划在用NGUI制作UI prefab时经常会使用一些临时的Atlas,然后再想改就不知道都哪些使用了.现在想修改下使用临时资源的GameObject 使用方式,先选中某个prefab或者某 ...
- C#导入Exel
; try { ]; string[] NoExPrentFile = new string[] { "xls", "xlsx" }; ] || fileTyp ...