可能是一个非常简单的 - 我开始使用C#并且需要为数组添加值,例如:
int[] terms;
for(int runs = 0; runs < 400; runs++)
{
terms[] = runs;
}
Run Code Online (Sandbox Code Playgroud)
对于那些使用过PHP的人来说,这就是我在C#中尝试做的事情:
$arr = array();
for ($i = 0; $i < 10; $i++) {
$arr[] = $i;
}
Run Code Online (Sandbox Code Playgroud) 哈希表可以实现O(1)似乎是常识,但这对我来说从来没有意义.有人可以解释一下吗?以下是两种情况:
答: 该值是一个小于哈希表大小的int.因此,该值是它自己的哈希值,因此没有哈希表.但如果有,那将是O(1)并且仍然是低效的.
B. 您必须计算值的哈希值.在这种情况下,查找数据大小的顺序为O(n).在你做O(n)工作之后,查找可能是O(1),但在我眼中仍然是O(n).
除非你有一个完美的哈希表或一个大的哈希表,否则每个桶可能有几个项目.因此,无论如何,它在某个时刻转变为一个小的线性搜索.
我认为哈希表很棒,但我没有得到O(1)的名称,除非它只是理论上的.
维基百科关于哈希表的文章始终引用常量查找时间并完全忽略哈希函数的成本.这真是一个公平的衡量标准吗?
编辑:总结我学到的东西:
这在技术上是正确的,因为哈希函数不需要使用密钥中的所有信息,因此可以是恒定时间,并且因为足够大的表可以将冲突降低到接近恒定的时间.
在实践中确实如此,因为随着时间的推移,只要选择散列函数和表大小来最小化冲突,即使这通常意味着不使用常量时间散列函数,它也只会有效.
在C#中我发现自己使用一个List<T>,IList<T>或IEnumerable<T>的99%的时间.是否有一种情况,使用a HashTable(或Dictionary<T,T>2.0及以上)比这些更好?
编辑:
正如所指出的那样,有人想对这个集合做什么通常会决定一个人应该使用什么,所以你何时会使用Hashtable/ Dictonary<T,T>over List<T>?
我需要快速处理我的页面.要添加的值的计数将是动态的.
以上哪一个是首选?支持有正当理由.
编辑:例如:
string str = "a,b,c"; //Count of the number of elements in str is not fixed
string[] arr = str.Split(',');
Run Code Online (Sandbox Code Playgroud)
要么,
ArrayList al = new ArrayList();
al.Add(str.Split(','));
Run Code Online (Sandbox Code Playgroud) 我正在写一个性能至关重要的服务,我不确定什么是最快的.我有几个对象(50-200),每个对象都有一个ID(整数,例如84397或23845).拥有一个Dictionary,一个KeyValue对列表或一个列表,其中索引设置为ID,其余的具有空值或具有相同想法的数组会更快吗?
人们经常告诉我不要使用ArrayList在VB.NET中制作我的数组.我想听听有关这方面的意见,为什么我不应该?创建和操作数组内容,维度等的最佳方法是什么?
谢谢.