在大多数编程语言中,字典比散列表更受欢迎.这背后的原因是什么?
我有一个Dictionary<int, object> 在int是的属性obj.有没有更好的数据结构?我觉得使用属性是关键是多余的.
这Dictionary<int, obj>是容器类中的一个字段,允许obj根据intid号随机索引值.容器类中的简化(无异常处理)索引器如下所示:
obj this[int id]
{
get{ return this.myDictionary[id];}
}
Run Code Online (Sandbox Code Playgroud)
myDictionary前面Dictionary<int, obj>拿着物体在哪里.
这可能是快速随机访问的典型方式,但我想获得第二意见.
我最近在几次关于Hashtables的访谈中进行了深入研究,并且何时需要覆盖GetHashCode().讨论一直在深入和深入,直到我全身心投入.
我现在正在做一些研究,以涵盖下一次准备好的一切.
我找到了这篇我想分享的优秀文章:http: //msdn.microsoft.com/en-us/library/ms379571(VS80).aspx #datastructures20_2_topic5
1)我感觉不太舒服的事实是字典是基于哈希的,但列表显然不是.这只是意味着在List <>和Array []中搜索是线性的,而在字典或散列表中搜索是不变的,因此更快?这都是它的全部吗?
2)如果我使用类作为字典中的键,我需要根据任何必需的标识字段覆盖该类的GetHashcode()以使实例唯一.但是,仍然可能发生两个ID字段相等并且将生成相同的哈希码?如果这是两个实例与相同哈希码冲突期间发生的情况?
3)如何解决碰撞?我在文章中读到了关于Hashtable和Chaining for the Dictionary的碰撞情况下的rehashing方法.但我仍然不确定它是如何工作的,因为我不是数学天才.: - \任何人都可以更好地解释它是如何工作的?
非常感谢,Kave
HashTable或Dictionary的查找时间是否始终为O(1),只要它具有唯一的哈希代码?
如果HashTable有1亿行,那么查找具有1行的内容需要相同的时间吗?
Dictionary和Hashtable有什么区别.我怎样才能得出哪些结论可以使用?有人可以帮帮我吗?
我有通过其字符串属性快速查找对象的任务.宾语:
class DicDomain
{
public virtual string Id{ get; set; }
public virtual string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
为了存储我的对象,我使用List [T]字典,其中T现在是DicDomain.我有5-10个这样的列表,每个列表包含大约500-20000.任务是按名称查找对象.我现在使用下一个代码:
List<T> entities = dictionary.FindAll(s => s.Name.Equals(word, StringComparison.OrdinalIgnoreCase));
Run Code Online (Sandbox Code Playgroud)
我有一些问题:
我的搜索速度是否最佳.我想现在.
我对这些任务没什么好处.你可以给我一些提高性能的好建议吗?谢谢
可能这个问题以前已经多次回答过很多次.然而,我正在寻找更具体的东西.我认为通用字典比Hashtables更快,因为它们不需要经历装箱/拆箱的过程.
但是,哈希表是否排序,这意味着搜索速度更快?由于键被散列和存储,搜索时是否会涉及装箱/拆箱?
序言:我正在研究生产大型数据阵列的重载应用程序.
我写了下面的课
using System;
using System.Collections;
using System.Collections.Generic;
namespace CSharpSampleApplication.Data.CoreObjects
{
[Serializable]
public class CalcItem
{
public CalcItem()
{
_additional = new Hashtable();
}
private readonly Hashtable _additional;
public bool ContainsKey(int id)
{
return _additional.ContainsKey(id);
}
public void Add(int id, double value)
{
_additional.Add(id, value);
}
public DateTime Date { get; set; }
public object this[int id]
{
get
{
return _additional[id];
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在另一个班级,我做了一个包含以下内容的经理:
public List<CalcItem> CalcItems{ get; private set;}
private readonly Dictionary<string, int> _keys;
private int …Run Code Online (Sandbox Code Playgroud) 我有一个哈希表,其键的类型为整数,但是当使用json.net进行反序列化时,键会以字符串形式返回,有没有办法使用json.net序列化/反序列化将键类型保留在哈希表上?此哈希表是"MyType"类型的属性
var settings = new JsonSerializerSettings();
settings.TypeNameHandling = TypeNameHandling.Objects;
string json = JsonConvert.SerializeObject(o, Formatting.Indented, settings);
mo = JsonConvert.DeserializeObject<MyType>(json, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects });
public Hashtable jsonViews
{
get { return mViews; }
set { mViews = value; }
}
Run Code Online (Sandbox Code Playgroud) c# ×8
.net ×5
hashtable ×2
collections ×1
dictionary ×1
idictionary ×1
json ×1
json.net ×1
optimization ×1
vb.net ×1