字典(Dictionary)和哈希表(Hashtable)

字典(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判断字典是否存在要找的内存
   if(item.Key=="")
   {
    
    
        Debug.Log("存在");
   }
}

//ContainsKey判断是否存在Key,返回一个Bool类型
if(dict.ContainsKey(""))
{
    
    
    Debug.Log("存在");
}

//ContainsValue判断是否存在Value,返回一个Bool类型
if(dict.ContainsValue()))
{
    
    
    Debug.Log("存在");
}

//TryGetValue判断Key值是否在字典中,返回一个Bool值给a(0或1)
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");//判断是否存在key值(返回bool类型)
bool i = hstable.ContainsValue(true);//判断是否存在Value值(返回bool类型)
//遍历哈希表
foreach(DictionaryEntry item in hstable)
{
    
    
    Debug.Log(item.key+" "+ item.Value);
}

字典与哈希表的区别:

1、多线程区别
单线程用字典,有泛型优势,读取速度快,容量利用更充分;
哈希表单线程写入,多线程读取
2、线程安全
字典非线程安全,必须人为的增加lock语句进行保护,影响效率。
哈希表可以调用Synchronized()方法可以获得完全线程安全的类型。
3、数据插入顺序
字典的排序就是按照插入的排序(注:删除节点后顺序就被打乱了),因此在需要体现顺序的情况下,字典更有效。
哈希表不是按照顺序插入数据的。
4、索引效率
字典在单线程索引数据的时候效率比较高,读取速度快,但是数据量大的时候效率会下降
哈希表的索引方式是经过散列处理的,在数据量大的时候处理效率更高,所以哈希表比较适合运用在做对象缓存,树递归算法的替代等各种需要提升效率的场合。

猜你喜欢

转载自blog.csdn.net/qq_45598937/article/details/127284883
今日推荐