首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Dictionary不像Hashtable那样访问不存在的键呢?

在编程语言中,Dictionary 和 Hashtable 都是常见的数据结构,用于存储键值对。它们之间有一些相似之处,但也有一些不同之处。

在 Dictionary 中,访问不存在的键时,会抛出 KeyNotFoundException 异常。这是因为 Dictionary 是一个泛型类,它的泛型参数是键和值的类型。当访问不存在的键时,Dictionary 会尝试返回该键的默认值,而如果该键不存在,则会抛出异常。

而 Hashtable 则不会抛出异常。当访问不存在的键时,Hashtable 会返回一个特殊的值,通常是 null。这是因为 Hashtable 是一个非泛型类,它的键和值都是 Object 类型,因此它可以返回 null 作为默认值。

总之,Dictionary 和 Hashtable 的不同之处在于它们处理不存在的键的方式。Dictionary 会抛出异常,而 Hashtable 则会返回一个特殊的值。这两种数据结构都有各自的优缺点,具体选择哪种数据结构取决于具体的应用场景和需求。

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Collections.synchronizedMap和Hashtable

创建出synchronizedMap之后,再操作map时候,就会对方法上锁(互斥锁),如图全是 2. 那么Hashtable?...说他效率低原因请看源码,基本上就是十分简单粗暴对各种操作方面加上synchronized 除了这个再能说出一些Hashtable 跟HashMap不一样点 Hashtable 是不允许或值为 null...hashtable要这样设计?...为啥要做null值抛异常? 这是因为Hashtable使用是安全失败机制(fail-safe),这种机制会使你此次读到数据不一定是最新数据。安全失败机制和快速失败机制 为什么不是最新?...所以我们只能把null给踢出去了 再说一下Hashtable和Hashmap区别 实现方式不同:Hashtable 继承了 Dictionary类,而 HashMap 继承是 AbstractMap

47020

C# 存储相同多个值Dictionary

其实我一开始自己也没绕出来,最初想到是使用Dictionary,键值对方式存数据,但是一开始没想那么多,就一顿猛操作,发现有一个问题 不能存在相同????...和Dictionary区别 1.HashTable   哈希表(HashTable)表示/值对集合。...: HashtableObject.Contains(key);   2.Dictionary   Dictionary表示和值集合。   ...[key]值一一对应存入该泛型   通过某一个一定[key]去找到对应值   3.HashTableDictionary区别:   (1).HashTable不支持泛型,而Dictionary...(4)在通过代码测试时候发现key是整数型Dictionary效率比Hashtable快,如果key是字符串型,Dictionary效率没有Hashtable快。

4.3K20

HashTable vs HashMap(三)

可能你觉得HashTable很好用,为什么不用?这里简单分析他们区别。...Hashtable和HashMap区别: 1.HashtableDictionary子类,HashMap是Map接口一个实现类; 2.Hashtable方法是同步,而HashMap中方法在缺省情况下是非同步...3.在HashMap中,null可以作为,这样只有一个;可以有一个或多个所对应值为null。...Hashtable继承自Dictionary类,而HashMap是Java1.2引进Map interface一个实现 HashMap允许将null作为一个entrykey或者value,而...最大不同是,Hashtable方法是Synchronize,而HashMap不是,在 多个线程访问Hashtable时,不需要自己为它方法实现同步,而HashMap 就必须为之提供外同步。

29030

.NET中泛型集合

TValue> Dictionary 是我们最常用关联性集合了,它访问,添加,删除数据所花费时间是所有集合类里面最快,因为它内部用了Hashtable作为存储结构,所以不管存储了多少键值对...Dictionary 优势是查找插入速度快==,那么什么是它劣势?...TryGetValue目的就是保证在用不存在进行探测时还能正常运行。 3、ISet是.NET 4新引入接口,表示唯一值集。...1.HashTable大数据量插入数据时需要花费比Dictionary时间。 2.for方式遍历HashTableDictionary速度最快。...你可以根据前一个值来更新与关联值;通过获取值,如果该事先不存在就添加;只有在值是你所期望时候才有条件地更新;以及许多其他可能性,所有这些行为都是原子

13820

数据结构基础温故-6.查找(下):哈希表

,其中key表示,val表示值,而hash_coll则是一个int类型,它用于表示所对应哈希码。...Hashtable通过关键字查找元素时,首先会计算出哈希地址,然后通过这个哈希地址直接访问数组相应位置并对比两个键值,如果相同,则查找成功并返回;如果不同,则根据hash_coll值来决定下一步操作...Dictionary内部有两个数组,一个数组名为buckets,用于存放由多个同义词组成静态链表头指针(链表第一个元素在数组中索引号,当它值为-1时表示此哈希地址不存在元素);另一个数组为entries...HashtableDictionary 区别: ①Hashtable使用闭散列法来解决冲突,而Dictionary使用开散列法解决冲突; ②Dictionary相对Hashtable来说需要更多存储空间...,但它不会发生二次聚集情况,并且使用了泛型,相对非泛型可能需要装箱和拆箱操作,Dictionary速度更快; ③Hashtable使用了填充因子概念,而Dictionary不存在填充因子概念

57810

Redis基础——剖析基础数据结构及其用法

如果你是一个有经验后端或者服务器开发,那么一定听说过Redis,其全称叫Remote Dictionary Server。是由C语言编写基于Key-Value存储系统。...buf[]; } 2.2.2 优点 为什么Redis要自己实现SDS而不是直接用C字符串?...List List也是一个使用频率很高数据结构,其涉及到命令太多了,就不像String那样一个一个演示了,感兴趣大家可以去搜一搜。...LinkedList由于是较为基础东西,此处就不赘述了。 3.2.1 ZipList ZipList采用连续内存紧凑存储,不像链表那样需要有额外空间来存储前驱节点和后续节点指针。...中值 hmset 批量设置hash中和值 hexists 判断hash中某个key是否存在 hkeys 返回hash中所有(不包含值) hvals 返回hash中所有值(不包含) hgetall

31710

HashTable 和 HashMap 区别

0x01: 继承父类不同 Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。...如果多个线程同时访问一个哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。...如果不存在这样对象,则应该使用 Collections.synchronizedMap 方法来“包装”该映射。...这里我们分析一下HashMap为什么是线程不安全: HashMap底层是一个Entry数组,当发生hash冲突时候,hashmap是采用链表方式来解决,在对应数组位置存放链表头结点...HashMap中,null可以作为,这样只有一个;可以有一个或多个所对应值为null。当get()方法返回null值时,可能是 HashMap中没有该,也可能使该所对应值为null。

52720

Java 关于集合框架那点事儿

如果试图添加重复        ,那么最后加入"-值对"将替换掉原先"-值       队"  Object get(Object key)    根据返回相关联值,若不存在指定,则返回...isEmpty()    若不存在-值映射关系,则返回true  void clear()     从此映射中移除所有映射关系 应用: 1.Map接口专门处理键值映射数据存储,可以根据实现对值操作...(2)Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。...Hashtable是基于陈旧Dictionary,HashMap是Java 1.2引进Map接口一个实现。   ...,ArrayList增长50%   Hashtable和HashMap异同  实现原理、功能相同,可以互用  主要区别:   Hashtable继承Dictionary类,HashMap实现Map接口

1.1K100

ConcurrentDictionary线程不安全么,你难道没疑惑,你难道弄懂了么?

在.NET1.0中出现了HashTable这个类,此类不是线程安全,后来为了线程安全又有了Hashtable.Synchronized,之前看到同事用Hashtable.Synchronized来进行实体类与数据库中表进行映射...为什么说是线程不安全?至少我们首先得知道什么是线程安全,看看其定义是怎样。定义如下: 线程安全:如果你代码所在进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。...该方法描述如下: TValue GetOrAdd(TKey key, Func valueFactory); 当给出指定时,会去进行遍历若存在直接返回其值,若不存在此时会调用第二个参数也就是委托将运行...(1)竞争条件 (2)死锁 那么问题来了,什么又是竞争条件?好吧,我是传说中十万个什么。 就像女朋友说哪有这么多为什么,我说都是对,不要问为什么,但对于这么严谨事情,我们得实事求是,是不。...,依据我个人理解并非完全线程不安全,只是对于多线程环境下有可能出现数据不一致情况,为什么说数据不一致

60630

Hashtable 实现原理

Hashtable 在 Java 中定义为: public class Hashtable extends Dictionary implements Map<...其中Dictionary类是任何可将映射到相应值类(如 Hashtable抽象父类,每个和值都是对象(源码注释为:The Dictionary class is the abstract parent...该话指出 Dictionary 这个类过时了,新实现类应该实现Map接口。 Hashtable 源码解读 成员变量 Hashtable是通过"拉链法"实现哈希表。...然后我们现在再插入一个,put(33,33),key=33索引为3,并且在链表中也不存在key=33Entry,所以将该节点插入链表第一个位置。 ?...Dictionary 是任何可将映射到相应值抽象父类,而 AbstractMap 是基于 Map 接口实现,它以最大限度地减少实现此接口所需工作。

57120

Java中HashMap和HashTable到底哪不同?

但是HashMap继承自抽象类AbstractMap,而HashTable继承自抽象类Dictionary。其中Dictionary类是一个已经被废弃类,这一点我们可以从它代码注释中看到: ?...,表示当前Entry对象在链表尾部 可以说,有多少个键值对,就有多少个Entry对象,那么在HashMap和HashTable中是怎么存储这些Entry对象,以方便我们快速查找和修改?...HashMap/HashTable还需要有算法来将给定key,映射到确定hash桶(数组位置)。需要有算法在哈希桶内键值对多到一定程度时,扩充哈希表大小(数组大小)。...线程安全 我们说HashTable是同步,HashMap不是,也就是说HashTable在多线程使用情况下,不需要做额外同步,而HashMap则不行。那么HashTable是怎么做到? ?...所以,尽可能使用新版本JDK吧,除了那些炫酷新功能,普通API也会有性能上有提升。 为什么HashTable已经淘汰了,还要优化它?

61820

使用集合组织相关数据

说明              Count 获取包含在Hashtable中键/值对数目              Keys 获取包含在Hashtable中键集合              ...value)  将代言指定和值元素添加到Hashtable中      void  Remove(Object key)  从Hastable中移除带有指定元素      void  ...) Hashtable table = new Hashtable(); //table中一个item=key+value table.Add("ICBC...     代替Hashtable     命名空间:System.Collection.Generic     语法:       Dictionary 对象名 = new Dictionary...item.Value); } #endregion          KeyValuePair是一个泛型结构,定义可设置或检索

75380

程序员修仙之路--把用户访问记录优化到极致

菜菜来重复一下,在用户访问记录缓存中怎么来判断是否有当前用户记录?...散列表用是数组支持按照下标随机访问数据特性,所以散列表其实就是数组一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。为什么要用数组?...散列表搜索方式决定了空位置之后元素就断片了....这也是为什么基于拉链方式散列表更常用原因之一吧。 4....我没用使用hashtable这个数据容器,是因为hashtable太容易发生装箱拆箱问题。 3....= new LinkedList(); //这里用哈希表变种Dictionary来存储访问记录,实现快速访问,同时设置容量大于缓存数量限制,减小哈希冲突

58730
领券