原文链接:https://javarevisited.blogspot.com/2010/10/difference-between-hashmap-and.html
HashMap和Hashtable都实现了Map接口,但是在决定在Java中是否使用HashMap或Hashtable之前,它们之间有一些重要的区别,这一点很重要。其中一些是线程安全、同步和速度。以下是这些不同之处:
1.HashMap类大致相当于哈希表,但它是非同步的,并且允许空值。(HashMap允许空值作为键和值,而哈希表不允许空)。
2.主要之一HashMap与Hashtable的区别是HashMap是非同步的,而Hashtable是同步的,这意味着哈希表线程安全,可以在多个线程之间共享,但是HashMap如果没有适当的同步,就不能在多个线程之间共享。Java 5介绍ConcurrentHashMap它是Hashtable的另一种选择,它提供了比Java中的Hashtable更好的可伸缩性。
3.HashMap和Hashtable之间的另一个显著区别是,HashMap中的迭代器是失败快速迭代器,而Hashtable的枚举器不是,如果任何其他线程通过添加或删除Iterator自己的remove()方法之外的任何元素在结构上修改映射,则抛出ConcurrentModificationException。但是这不是一种有保证的行为,JVM将尽最大努力来完成。这也是Java中枚举和迭代器之间的一个重要区别。
4. Hashtable和HashMap之间一个更显著的区别是,由于线程安全性和同步性,如果在单线程环境中使用,Hashtable比HashMap慢得多。因此,如果您不需要同步,并且HashMap仅由一个线程使用,那么它的性能将优于Java中的Hashtable。
5. HashMap不能保证映射的顺序在一段时间内保持不变。
1)Synchronized是指在一个时间点上只有一个线程可以修改哈希表。基本上,这意味着在对哈希表执行更新之前,任何线程都必须获得对象上的锁,而其他线程将等待该锁被释放。
2)故障安全与迭代器的上下文相关。如果在集合对象上创建了迭代器或ListIterator,而其他线程试图“结构化地”修改集合对象,则会引发并发修改异常。不过,其他线程也可以调用“set”方法,因为它不会“在结构上”修改集合。但是,如果在调用“set”之前在结构上修改了集合,则会抛出“IllegalArgumentException”。
3)结构修改是指删除或插入可以有效改变地图结构的元素。
HashMap可以通过以下方式同步
Map m = Collections.synchronizeMap(hashMap);
总之,Hashtable和HashMap在Java中有很大的区别,例如线程安全性和速度,并且只有在绝对需要线程安全性(如果运行Java 5)的情况下才使用Hashtable,那么可以考虑在Java中使用ConcurrentHashMap。
来源:网络
HashMap: –非线程安全 –实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆。 –HashMap内部维护了一个存储数据的Entry数组,HashMap采用链表解决冲突,每一个Entry本质上是一个单向链表。(数组+链表) 较早前的hashMap底层的存储就是采用这种结构,直到jdk1.8之后才换成了数组加红黑树的...
1.同步问题 HashMap它不是线程安全的 。 HashTable是线程安全的 他给每个方法上都加了synchronize关键字 所以效率会比较低 2.继承的父类不同 HashMap继承的父类是 AbstractMap HashTable继承的父类是 Dictinary 3.键值区别 HashMap 他的key和value都可以是null值; 而HashTable的 key和value不能为空值...
list与set方法的区别有:list可以允许重复对象和插入多个null值,而set不允许;list容器是有序的,而set容器是无序的等等 Java中的集合共包含三大类,它们分别是Set(集),List(列表)以及Map(映射)。它们都处在java.util中并且都为接口。它们各自都有各自的实现类。Set的实现类主要有HashSet和TreeSet,List的实现类主要有ArrayList。接下来...
今天看了一下公司同事的代码,如下 好奇,为何需要将 URLConnection 转 HttpURLConnection ? 点进两个源码里面发现 将转换的代码注掉,发现编译报错,证明 再去仔细看 两个类分别得详解,个人理解: ==================分割线==================== 这是我搜到的博友写的,区别 &nb...
先说结论: 1、这两个方法来自不同的类分别是Thread和Object 2、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。 3、wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围) 4、sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常 5、...
环境:PowerDesigner 15.1 问题:生成数据库报表文件 解决: 当设计出数据库以后,有一份正规的DOC文件是很必要的,下面讲解如何生成报表。 1 新建立报表文件右键单击模型,选择New------->Report,弹出如下界面。 2 输入报表名称,选择报表模板。 3 拖拉需要显示的部分到报表输出选项。 4 修改输出选项的内容在内容上单击右键,选择Format,可以修改相应项目的...
废话不多说,因为工作关系,这次接触到蓝牙功能开发,下面是我第一次蓝牙开发的经验总结,对于将要从事蓝牙开发的人,或许有些帮助。 Android蓝牙分为传统蓝牙开发和ble蓝牙开发。下面就有小伙伴疑问了,我该学习哪个呢,其实不然,只要你学会其中一种开发模式,对于另外一种开发模式无师自通。还有,...
作者:李坤凤 本次任务完成时间:2019年2月15日 开发工具与关键技术:开发工具:SQL、.net,关键技术:JS、JavaScript、C#语言 完成模块功能:库存查询 一、 库存查询(可按:天、月查询) 点击导出进行Excel表格导出; 点击头部第一行的按钮分别跳到不同的页面; 点击操作按钮跳转其他页面,库存流水、库存分布、成本明细; 本月查询 3. 点击导出进行Excel导出 二、业务表相...
1 、什么是自动装配 (1)根据指定装配规则(属性名称或者属性类型),Spring 自动将匹配的属性值进行注入 (1)根据属性名称自动注入 <!--实现自动装配 bean 标签属性 autowire,配置自动装配 autowire 属性常用两个值: byName 根据属性名称注入 ,注入值 bean 的 id 值和类属性名称一样 byType 根据属性类型注入 --> &...
问题: 像这种项目目录结构,里面每一个目录里面都有相同的类,编译时会出现 错误:类重复 报错无法继续编译 解决方案1: 在build Variant选项中选择你想要对应的编译选项,编译且运行到手机上 。如不能解决问题,看下面的方案 解决方案2: &n...
Is it possible to use XGBoost for multi-label classification? Now I use OneVsRestClassifier over GradientBoostingClassifier from sklearn. It works, but use only one core from my CPU. In my data I have...
I'm trying to get all the books regarding computer science from Pearson's website (starting from this url: https://www.pearson.com/us/higher-education/professional---career/computer-science/computer-s...
I have used a semaphore to restrict the number of threads accessing a function. I want the thread to be awakened next should be chosen by some priority which i will be giving,not by default way that s...
I am trying to run $ sudo su in the terminal of AWS Cloud9. I get prompted for the password for the ec2-user. Any ideas what this might be? Might be worth noting that prior to coming up against this i...
DAO-object gets from DB only limited count of objects. Only Clear - Build - Deploy can help. I have DB with connected by foreign keys entities. One of them is User. Other one - Book. Those entities ar...