Hashtable和HashMap的区别
1.Hashtable是Dictionary(抽象类,如下:)的子类,HashMap是Map接口的一个实现类;
2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:
Map Collections.synchronizedMap(Map m)
这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。同步是有代价的,而Hashtable的同步机制是无法在不需要的时候关闭掉的,因此编程中出于性能的考虑,我们都应该首选HashMap。
3.在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。
--------------------------------------- Dictionary类 --------------------------------------------------
Dictionary类是一个抽象类,定义了一个映射键(keys)与值(values)的数据结构。该类可以通过特定的键来访问数据。由于Dictionary类是抽象类,它仅仅提供了一个用于健与数据之间映射的数据结构框架,而不是一个特定的实体。
通常,Dictionary被用来将一个对象和一个名字联系起来,并基于这个名字来检索对象。在Dictionary中,名字对象被称为一个关键字,可为任意类型的对象,和关键字相联系的对象称为值。一个关键字只能与一个值相对应,但是一个值可以有多个关键字。
7.11.1 在Dictionay中存储对象
在Dictionary中,pul方法使用特定的关键字来存储对象:
·public abstrack Object put(Object key,Object value) throws NullPointarException
用put方法返回的对象是从前与该关键字相联系的对象,如果没有以前的联系,则返回null。不能将key或value设置为null值,如果将null传递给这两个参数中的任意一个,将产生一个NullPointerException异常。
7.11.2 从Dictionary中检索对象
get方法查找Dictionary和一个特定的关键字相联系的对象:
·public abstract Object get(Object key) 如果没有和这个关键字相对应的值则返回null
7.11.3 从Dictionary中移走对象
·public abstrac Object remove(Object key) 为了从Dictionary中移走一个“关键字-值”对。返回值是与关键字相联系的对象,如果没有和这个关键字相联系的对象,返回null。
·public abstract boolean isEmpty() 如果Dictionary中没有对象,isEmpty方法返回true:
·public abstract int size() 返回Dictionary中含有多少个“关键字-值”对。
·public abstract Enumeration keys() 返回一个枚举对象,该对象允许检查Dictionary中所有的关键字。
·public abstract Enumeration elements() 对于Dictionary中的所有值,elements方法返回一个枚举对象。
分享到:
相关推荐
3. **初始容量与负载因子**:HashMap在创建时可以通过构造函数指定初始容量和负载因子。负载因子是容量与实际元素数量的比值,当元素数量达到容量的负载因子时,HashMap会自动进行扩容,以保持其性能。 HashMap的...
1. **HashMap的定义与特性** - HashMap是一个基于哈希表的实现,提供了键映射到值的服务。 - 它继承自AbstractMap,实现了Cloneable和Serializable接口,意味着它可以被复制和序列化。 - HashMap的核心特性是其...
jdk8-HashMap,效果演示
《C语言实现的哈希映射——c_hashmap-master中的keys操作详解》 在计算机科学领域,哈希映射(Hash Map)是一种高效的数据结构,它通过特定的哈希函数将键(Key)映射到数组的索引位置,从而实现快速的查找、插入和...
3. **容量与负载因子**:`HashMap`有一个初始容量(默认为16)和负载因子(默认为0.75)。当元素数量达到容量与负载因子的乘积时,`HashMap`会自动进行扩容,将容量翻倍。 4. **键值对**:键(Key)必须实现`...
`HashMap`作为一种常见的数据结构,它在JavaScript中的应用广泛,特别是在处理大量数据时,可以提供比原生对象更快的查找、添加和删除操作。`HashMap`是基于键值对存储的数据结构,其核心特性是通过哈希函数快速定位...
虽然这个插件可以自动处理,但最好还是进行人工审查,确保代码质量与逻辑正确。 这个插件的使用有助于提升PHP代码的可读性和可维护性,特别是当需要处理大量数据结构时,返回数组而不是创建变量可以使代码更清晰。...
一线大厂BATJ面试题讲解-hashmap原理实现
在Java编程语言中,HashMap是一种常用的集合类,用于存储键值对数据。它实现了Map接口,提供了快速的插入、删除和查找操作。本项目“Generic-HashMap-Java”旨在提供一个泛型化的HashMap实现,以增强类型安全性并...
### HashMap与HashTable的区别详解 #### 引言 在Java编程中,`HashMap`与`HashTable`作为两种常用的数据结构,经常被用来存储键值对数据。尽管它们在功能上相似,但在实现细节、性能表现以及使用场景方面存在显著...
5. 无序性:HashMap中的键值对插入顺序与遍历顺序不一定相同,除非使用LinkedHashMap,它在保持HashMap特性的基础上提供了有序性。 在使用HashMap时,需要注意以下几点: 1. 自定义键类需重写equals()和hashCode()...
在Java编程语言中,HashMap是集合框架中一个重要的类,用于存储键值对的数据结构。这个实例教程将深入解析HashMap的遍历方法及其源代码,帮助开发者更好地理解和使用HashMap。以下是对这个主题的详细讲解: 1. **...
综上所述,`HashMap`中的hash算法设计考虑了多种因素,旨在通过合理的高位扩展与低位扩散策略来提高数据分布的均匀性和减少冲突的可能性。通过以上分析,我们可以更加深入地理解`HashMap`内部的工作机制,这对于理解...
### HashMap与Hashtable的区别 在Java编程语言中,`HashMap`和`Hashtable`是两种非常重要的数据结构,它们都用于存储键值对。然而,在实际应用过程中,这两种数据结构有着本质的不同,下面将详细介绍这些差异。 ##...
该项目为基于Java并发编程的ConcurrentHashMap测试设计源码,共包含24个文件,其中Java源文件21个,Git忽略文件1个,Markdown文档1个,XML配置文件1个。内容涵盖并发编程课件代码,适合学习并发编程相关知识。...