字典(Dictionary)和哈希表(Hashtable)的使用与区别
字典:
1.字典是一种典型的键值对类型的数据结构,每一个元素都是由一个键值对(键key和值value)组成。 2.这种数据结构可以通过某个键来访问元素,所以字典也被称为映射或散列表。 3.字典的主要特性是根据键快速查找值,也可以自由添加和删除元素,这有点像List,但跟List不同的是,List是连续存储,直接定址的。 字典像链表,非连续存储,所以删除元素不需要移动后续元素,就没有在内存中移动后续元素的性能开销。 4.通过键来检索值的速度是非常快的,接近于 O(1),这是因为 Dictionary 类是作为一个哈希表来实现的,Dictionary 没有顺序之分,这一点不同于list列表,有顺序之分。 键必须是唯一的,而值不需要唯一。 5.字典中的键和值都是object类型,所以可以是任何类型(比如:string、int、自定义类型等等)
Dictionary<string,int> dict = new Dictionary<string,int>();
dict.Add();
dict.Remove();
dict.Clear();
foreach(var item in dict)
{
Debug.Log(item.Key+item.Value);
if(item.Key=="")
{
Debug.Log("存在");
}
}
if(dict.ContainsKey(""))
{
Debug.Log("存在");
}
if(dict.ContainsValue()))
{
Debug.Log("存在");
}
int a;
dict.TryGetValue("",a);
Debug.Log(a);
哈希表:
1.哈希表Hashtable类实现了IDictionary接口,集合中的值也是以键值对(key/value)的形式存取的。 2.哈希表,也称为散列表,在该集合中每一个元素都是由键值对(key/value)的形式存放值。 3.需要注意的是,key是区分大小写的。 4.哈希表Hashtable中的键和值为object类型,所以哈希表Hashtable支持任何类型的键值对。
using System.Collections.Generic;
Hashtable hstable = new Hashtable();
hstable.Add(1,"2");
hstable.Add("a",true);
hstable.Remove("a");
bool t - hstable.ContainsKey("a");
bool i = hstable.ContainsValue(true);
foreach(DictionaryEntry item in hstable)
{
Debug.Log(item.key+" "+ item.Value);
}
字典与哈希表的区别:
1、多线程区别 单线程用字典,有泛型优势,读取速度快,容量利用更充分; 哈希表单线程写入,多线程读取 2、线程安全 字典非线程安全,必须人为的增加lock语句进行保护,影响效率。 哈希表可以调用Synchronized()方法可以获得完全线程安全的类型。 3、数据插入顺序 字典的排序就是按照插入的排序(注:删除节点后顺序就被打乱了),因此在需要体现顺序的情况下,字典更有效。 哈希表不是按照顺序插入数据的。 4、索引效率 字典在单线程索引数据的时候效率比较高,读取速度快,但是数据量大的时候效率会下降 哈希表的索引方式是经过散列处理的,在数据量大的时候处理效率更高,所以哈希表比较适合运用在做对象缓存,树递归算法的替代等各种需要提升效率的场合。
|