HashMap和Hashtable的区别

HashTable和HashMap的区别详解 HashTable和HashMap的区别详解 一、HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。 HashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆。 HashMap存数据的过程是 阅读详情
导读: 

1 HashMap不是线程安全的


            hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。


2   HashTable是线程安全的一个Collection。


HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。


public static void main(String args[])
{
HashTable h=new HashTable();
h.put("用户1",new Integer(90));
h.put("用户2",new Integer(50));
h.put("用户3",new Integer(60));
h.put("用户4",new Integer(70));
h.put("用户5",new Integer(80));
Enumeration e=h.elements();
while(e.hasMoreElements()){
System.out.println(e.nextElement());
}


map 的方法:


clear()从 Map 中删除所有映射


remove(Object key)从 Map 中删除键和关联的值


       put(Object key, Object value)将指定值与指定键相关联 

get(Object key)返回与指定键关联的值


containsKey(Object key)如果 Map 包含指定键的映射,则返回 true 

 


 


containsValue(Object value)如果此 Map 将一个或多个键映射到指定值,则返回 true


isEmpty()如果 Map 不包含键-值映射,则返回 true size()返回 Map 中的键-值映射的数目





这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。





有序否


允许元素重复否


Collection


否


是


List


是


是


Set


AbstractSet


否


否


HashSet


TreeSet


是(用二叉树排序)


Map


AbstractMap


否


使用key-value来映射和存储数据,Key必须惟一,value可以重复


HashMap


TreeMap


是(用二叉树排序)


 

 


 


List 接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作。在具体应用时可以根据需要自由选择。前面说的Iterator只能对容器进行向前遍历,而 ListIterator则继承了Iterator的思想,并提供了对List进行双向遍历的方法。 

Set接口也是 Collection的一种扩展,而与List不同的时,在Set中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个Set容器中。它的常用具体实现有HashSet和TreeSet类。HashSet能快速定位一个元素,但是你放到HashSet中的对象需要实现hashCode()方法,它使用了前面说过的哈希码的算法。而TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口。有时多个类具有相同的排序算法,那就不需要在每分别重复定义相同的排序算法,只要实现Comparator接口即可。集合框架中还有两个很实用的公用类:Collections和 Arrays。Collections提供了对一个Collection容器进行诸如排序、复制、查找和填充等一些非常有用的方法,Arrays则是对一个数组进行类似的操作。 


            Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。对于键对象来说,像Set一样,一个Map容器中的键对象不允许重复,这是为了保持查找结果的一致性;如果有两个键对象一样,那你想得到那个键对象所对应的值对象时就有问题了,可能你得到的并不是你想的那个值对象,结果会造成混乱,所以键的唯一性很重要,也是符合集合的性质的。当然在使用过程中,某个键所对应的值对象可能会发生变化,这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性的要求。你可以将任意多个键都映射到一个值对象上,这不会发生任何问题(不过对你的使用却可能会造成不便,你不知道你得到的到底是那一个键所对应的值对象)。Map有两种比较常用的实现: HashMap和TreeMap。HashMap也用到了哈希码的算法,以便快速查找一个键,TreeMap则是对键按序存放,因此它便有一些扩展的方法,比如firstKey(),lastKey()等,你还可以从TreeMap中指定一个范围以取得其子Map。键和值的关联很简单,用pub (Object key,Object value)方法即可将一个键与一个值对象相关联。用get(Object key)可得到与此key对象所对应的值对象。

 

转自:http://blog.youkuaiyun.com/ago52030/archive/2008/04/12/2287041.aspx

Java中HashMap和Hashtable的区别 HashMap的迭代器设计为fail-fast是为了快速检测到并发修改,避免在迭代过程中出现数据不一致的问题。当检测到并发修改时,迭代器会立即抛出,提醒开发者需要处理并发问题。 阅读详情

相关推荐

FPGA时钟架构解密:从SRCC/MRCC到全局时钟树的实战指南

本文深入解析Xilinx 7系列FPGA时钟架构,从SRCC/MRCC引脚特性到全局时钟树设计,详细介绍了BUFG、BUFMR等关键组件的应用场景和优化策略。通过对比SRCC与MRCC的驱动范围及适用场景,提供低抖动时钟布线技巧和时钟域交叉(CDC)设计方法,帮助工程师构建高性能FPGA时钟系统。

weixin_29191081的博客 1484

笔试总结之美亚柏科

最近我的一些学弟经常询问我关于笔试和面试的经验,今天开始准备将今年秋招中遇到的公司的一些经典题目总结一下, 也给网络上的朋友们分享分享一点微薄的经验吧。这篇博客记录厦门美亚柏科的笔试题,题目都很基础,但也都非常的经典。 -------------------------------分割线-------------------------------- 一、选择题 1、short a[100]

hjf161105的博客 1万+

BDD测试之Behave使用入门

BDD测试(Behavior-Driven Development Testing)是一种基于“行为驱动开发”(BDD)理念。

想要成为酷盖但是失败的小明 580

美亚柏科JAVA实习面试题

什么是基本数据类型?列举基本数据类型。int和Integer的区别。String是类吗? s1=s1+1有错吗?s1+=1有错吗? 面向对象编程的五大设计原则和三大特性 抽象类和接口的区别 Cookie和session的区别 创建线程的方法 Hashmap安全吗 线程和进程的区别 sleep()和wait()区别 单例模式(代码) 写出一种你熟悉的排序算法(代码) Jsp4种内置对象 List,...

tong_0512的博客 1959

SUMO使用教程(一)

本人的sumo视频入门课程,希望支持哦。https://edu.youkuaiyun.com/course/detail/25834 SUMO是一款交通仿真软件,其余可自行百度。教程一主要展示一下如何运行一个仿真实例。当然,这只是实现方法中的一种。 准备: 1.SUMO软件 2.osm地图文件 SUMO可去官网下载,解压后就可以使用,图形界面软是在解压后bin文件夹下的sumo-gui.exe。...

lyx的专栏 3万+

单片机应用案例:ESP32 搭配 BH1750 光强传感器和 Web 服务器

在该应用案例中,我们将使用 ESP32 开发板作为主控制器,BH1750 光强传感器用于采集环境光强度数据,并通过 Web 服务器展示采集到的数据。步骤一:购买材料步骤二:连接硬件步骤三:编写代码我们将使用 Arduino IDE 编写代码,以下是主要代码:// WiFi 设置const char* ssid = “你的 WiFi 名称”;const char* password = “密码”;// Web 服务器实例// BH1750 实例// 获取当前光强度数据。

RlDart的博客 813

HashMap和HashTable的区别

HashMap是继承自AbstractMap类,而Hashtable是继承自Dictionary类。不过它们都实现了同时 实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口。

sinat_26552841的博客 1万+

基于 Langchain 开发一个完整的支持多轮数据分析(直连 mysql 数据,多表综合分析 SQL 取数,数据分析,报表生成)ChatBI 系统(前后端完整实现源代码)

ChatBI系统开发摘要 本文介绍了基于Langchain的多轮数据分析ChatBI系统开发方案。该系统支持MySQL数据库连接,提供多表分析、SQL查询、数据分析和报表生成功能。系统采用前后端分离架构:前端使用React+Ant Design+ECharts实现交互界面;后端基于FastAPI搭建服务,集成Langchain处理自然语言到SQL的转换;核心技术栈还包括SQLAlchemy、Pandas和Matplotlib。 系统核心模块包括: 数据库连接层:使用SQLAlchemy管理MySQL连接 L

AI天才研究院 814

HashMap和HashTable区别

Hashtable的查找、插入和删除操作平均时间复杂度为O(1),但是在极端情况下,因为哈希冲突的原因,可能会退化到O(n)。HashMap中可以存储null值和null键,但是要注意,当使用null作为键时,由于无法调用null的hashCode()方法,因此只能将其放在哈希表的第一个位置,它们是无序的。另外,由于HashMap采用链表和红黑树的数据结构,可以更好地处理哈希冲突,因此HashMap的查找、插入和删除操作都是常数时间O(1)。线程安全性指在多线程环境下,数据的并发访问是否会产生问题。

weixin_58724261的博客 1万+

ICC2: pin shape不在track上引起的drc如何解决?

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 433

结构优化软件:OptiStruct_(11).拓扑优化

在OptiStruct中,设计空间可以通过定义设计区域来实现。设计区域是结构中可以进行材料变化的部分。几何区域:通过几何选择工具选择特定的区域。网格区域:通过网格选择工具选择特定的单元。假设我们有一个简单的梁结构模型,网格文件为beam.fem。我们希望在梁的中部进行拓扑优化,以减轻重量并保持刚度。

kkchenjj的博客 1367

hashmap和hashtable的区别

Map集合转成Set集合--------- Set<Map.Entry<K,V>> entrySet()将key的hashCode和数组容量-1的二进制数进行与操作------得到key的hash值,即数组的下标。获取map集合中所有key-------Set keySet() 所有的键是一个set集合。判断是否包含某个value---------boolean cotainsValue(value)(1)当key通过hash算法得到的哈希值相同时------hash碰撞(hash冲突)

qq_61603498的博客 2332

YOLOv8集成EMA注意力机制YOLOv8完整教程 将EMA注意力机制集成到YOLOv8框架中

YOLOv8教程这篇文章介绍了如何将EMA(高效多尺度注意力)机制集成到YOLOv8目标检测框架中。YOLOv8 EMA注意力机制通过多尺度特征融合和高效计算,能够提升模型对关键特征的关注能力。文章详细解析了EMA的原理和结构设计,包括其核心组件和前向传播过程。此外,提供了完整的实现指南,包括环境准备、项目结构设置、EMA模块代码实现(包含分组处理、空间注意力计算和特征融合等关键步骤)。YOLOv8 YOLOv8 YOLOv8 YOLOv8 YOLOv8

FJN110的博客 925

HashMap 和 Hashtable 有什么区别?

HashMap 和 Hashtable 有什么区别? JDK1.8 主要区别如下: 线程安全性不同。HashMap线程不安全;Hashtable 中的方法是Synchronize的。 key、value是否允许null。HashMap的key和value都是可以是null,key只允许一个null;Hashtable的key和value都不可为null。 迭代器不同。HashMap的I...

ConstXiong 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ArrayList 和 Vector,HashMap 和 Hashtable的区别

都是Java集合框架中提供的动态数组实现类,它们之间存在一些显著的区别。

chen2017sheng的博客 1104

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

HashMap 和 Hashtable 的区别

一、继承的父类不同 HashMap继承自AbstractMap类,而Hashtable继承自Dictionary类。尽管它们实现的接口都是Map接口,但由于继承的父类不同,导致它们在一些行为和方法上存在差异。 二、线程安全性不同 HashMap是非同步的,这意味着它不是线程安全的。在多个线程同时访问HashMap时,如果没有适当的同步机制,可能会导致数据不一致的问题。 Hashtable是线程安全的,它的方法被synchronized修饰,因此在多线程环境下可以直接使用Hashtable而无需额外的同

2301_80140022的博客 1514

Hashtable和HashMap的区别

下面直接来干货,先说这三个Map的区别: HashTable 底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化 初始size为11,扩容:newsize = olesize*2+1 计算index的方法:index = (hash & 0x7FFFFFFF) % tab.length HashMap 底层数组+链表实现,可以存储null键和null值,线

yanwendonge的博客 9418

HashMap和Hashtable区别?

参考: https://blog.youkuaiyun.com/luojishan1/article/details/81952147 存储:HashMap 允许key 和 value 为 null,而 Hashtable 不允许。 线程安全:Hashtable 是线程安全的,而 HashMap 是非线程安全的。 推荐使用:在 Hashtable 的类注释可以看到,Hashtable 是保留类不建议使用,推...

exodus520的博客 1512

Java中HashMap和Hashtable有什么区别

原文链接:https://javarevisited.blogspot.com/2010/10/difference-between-hashmap-and.html Java中HashMap与Hashtable的区别 HashMap和Hashtable都实现了Map接口,但是在决定在Java中是否使用HashMap或Hashtable之前,它们之间有一些重要的区别,这一点很重要。其中一些是线...

Mr.Xie的博客 1万+
上一篇: Android设计模式系列
下一篇: Android技术积累:图片缓存管理
stonenotes123
博客等级 码龄15年 30粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值