标签:不重复 位置 需要 cti 通过 散列 检索 推荐 生成
List
是顺序线性表(非链表),用一组地址连续的存储单元依次存储数据元素的线性结构,在c#中,我们实例化list时,如果不指定容量,则内部会生成一个静态的空数组,有添加操作时,实例化为一个长度为4
的数组,满了以后,自动扩充为两倍的容量
哈希表也叫散列表,是一种通过把关键码值映射到表中一个位置来访问记录的数据结构。c#中的哈希表有Hashtable
,Dictionary
,Hashtable
继承自Map
,实现一个key-value
映射的关系。Dictionary
则是一种泛型哈希表,不同于Hashtable
的key无序,Dictionary
是按照顺序存储的。哈希表的特点是:1.查找速度快,2.不能有重复的key。 默认生成一个长度为11
的哈希表,满后,自动添加,而添加规则是内部循环素数数组,稍大于当前的长度,比如15,则长度设定为17。在哈希表创建可分为确定哈希函数,解决哈希冲突两个步骤
哈希表的高速查找是空间换时间的典型应用,前期的建立时间随着数量级的增加而增加,后期的查找则永远是O(1)。所以我们得出结论:如果面对海量数据,且需要大量搜索,那建议使用哈希表。而当面对小量数据(数量级由服务器决定)时,使用List
更合适。
Dictionary
。Dictionary
的运行时间比hashtable
稍快,而且Dictionary
是类型安全的,这有助于我们写出更健壮更具可读性的代码,省去我们强制转化的麻烦。Dictionary
是泛型的,当K或V是值类型时,其速度远远超过Hashtable
HashTable
哈希表(HashTable
)表示键/值对的集合。在.NET Framework中,Hashtable
是System.Collections
命名空间提供的一个容器,用于处理和表现类似key-value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable
中key-value键值对均为object类型,所以Hashtable
可以支持任何类型的keyvalue键值对,任何非 null 对象都可以用作键或值。
HashSet
HashSet<T>
类主要是设计用来做高性能集运算的,例如对两个集合求交集、并集、差集等。集合中包含一组不重复出现且无特性顺序的元素,HashSet
拒绝接受重复的对象。HashSet<T>
的一些特性如下:
HashSet<T>
中的值不能重复且没有顺序。HashSet<T>
的容量会按需自动添加。Dictionary
Dictionary
表示键和值的集合。Dictionary<string, string>
是一个泛型Dictionary<[key], [value]>
HashTable
和Dictionary
的区别:
HashTable
不支持泛型,而Dictionary
支持泛型。Hashtable
的元素属于Object
类型,所以在存储或检索值类型时通常发生装箱和拆箱的操作,所以你可能需要进行一些类型转换的操作,而且对于int
,float
这些值类型还需要进行装箱等操作,非常耗时。Dictionary
, 有泛型优势, 且读取速度较快, 容量利用更充分。多线程程序中推荐使用 Hashtable
, 默认的 Hashtable
允许单线程写入, 多线程读取, 对 Hashtable
进一步调用 Synchronized()
方法可以获得完全线程安全的类型. 而 Dictionary
非线程安全, 必须人为使用 lock
语句进行保护, 效率大减。key
是整数型Dictionary
的效率比Hashtable
快,如果key
是字符串型,Dictionary
的效率没有Hashtable
快。ArrayList
,List
,HashTable
,Dictionary
四者的区别与联系
标签:不重复 位置 需要 cti 通过 散列 检索 推荐 生成
原文地址:https://www.cnblogs.com/fmy-hmfy/p/11623803.html