hashmap和hashtable有什么区别?

在Java编程中,Hashmap和Hashtable都是用于存储密钥值对的集合类。
在许多方面有相似之处,但也存在一些重要的差异。
这些差异主要反映在线程安全性,哈希算法,性能和使用情况下。
首先,让我们看一下线程的安全性。
Hashmap是非线程安全的。
这意味着在多线程环境中使用hashmap可能会导致数据不一致或并发访问。
Hashtables是线程安全的,因此在多线程环境或并发场景中使用时不需要其他同步机制。
其次,哈希算法的实现也不同。
使用开放的地址方法和链接的列表/树结构进行哈希图处理的哈希冲突,这意味着更高的空间利用率,但是查询性能可能会受到冲突的影响。
Hashtable使用链接列表来处理哈希冲突。
这避免了由开放式寻址方法引起的空间浪费,但是在多线程环境中额外的锁定开销的性能可能会受到影响。
在性能方面,哈希图通常比哈希托人更快,因为它们在处理哈希冲突时会使用更有效的机制。
此外,哈希图允许null键和值,而Hashtable允许null键和值。
当您需要灵活使用键和值时,这使得施加图更加有用。
最后,使用情况也是一个重要的区别。
Hashtable线程安全使其适合在需要数据的多线程环境或方案中使用。
由于性能优势和灵活性,载图通常更适合具有高性能要求的单线或场景。
简而言之,哈希图和伸展人在Java Collection框架中扮演着不同的角色。
做出选择时,您需要确定哪些应用程序方案,并且需要遵循您的特定应用程序方案和需求。
我们希望这些信息能够更好地了解两类之间的差异,并在面试中提供更详细的答案。

JAVA集合(一)list与Set、Map区别

Java集合中列表,安装和卡之间的差异如下:1 函数列表:列表是一个有序集合,可让您存储重复元素,并且每个元素都有索引。
一般实现:阵列列表:基于数组的实现,搜索效果很高,但是在某些地方的元素插入和删除相对较低。
LinkedList:基于列表的实施介绍,插入和删除效率,搜索效率相对较低。
向量:类似地,ArrayList,但所有方法均已同步,因此受到保护。
2 .集合功能:SET是一个集合,不允许您存储元素的重复项,并且没有特定的顺序。
一般实施:哈希集:基于哈希(Hash -Table),搜索,插入和删除的实施,有效。
TREESSET:根据红色和黑色木材的实施,可以自然或根据提供的比较器对元素进行分类。
3 地图功能:地图是一对键盘的集合。
键不允许重复,但可以重复这些值。
一般实施:哈希姆普:基于哈希(Hash -Table),搜索,插入和删除的实现,有效,但不能保证该订单。
hashtable:类似地hashmap,但所有方法均已同步,因此安全。
但是,由于JDKTable由JDK1 .0表示,HashMap由JDK1 .2 表示,因此HashMap提供了更多功能和更好的性能。
ConcurrenthashMap:Hashmap的保护版,它比Hestat提供了比较有效的并行生产力。
Treemap:根据红色和黑色木材的实现,可以自然或按照提供的比较器对键进行排序。
摘要:该列表适用于场景,应在其中存储并获得元素。
该集合适用于场景,在这种情况下,必须在不考虑元素顺序的情况下存储独特的元素。
该卡适用于需要键盘对的方案,并且可以根据键迅速找到相应的值。
选择特定的实现时,有必要根据应用程序脚本和性能要求的特征来创建妥协。

JAVA 集合 接口继承关系和实现,List,Set,Map(总结)

总结Java集合接口的继承和实现如下:1 集合接口及其子收集接口:包括Java收集框架的基本接口,包括一系列集合操作方法,例如其他,删除,等等。
中间。
向量:类似于ArrayList,但对主题是安全的,因此在多线程环境中的性能较低。
LinkedList:基于链接列表的实现,适用于常规插入和删除活动,但随机访问效果较低。
设置界面:从集合接口继承,它是一个不包含重复元素的集合。
接口集的主要部署层是:基于哈希表部署的哈希集:部署,元素不是顺序和独特的,也不支持安排。
树木:根据二元树的实施,可以安排因素。
linkhashset:结合标签和LinkedList的特征,不仅确保了元素的唯一性,而且还保留了因子的插入顺序。
2 地图接口及其部署层映射接口:与收集接口并行,用于存储锁定值。
地图接口的主要部署层是:哈希姆普:基于哈希表的部署,不安全和支持的null和空值。
在JDK8 及以后的版本中,当列表长度超过一定阈值时,它将转换为红色和黑色树,以提高查询效率。
具体策划:安全的哈希姆普,引入了一种锁定机制,以同时提高性能。
在JDK8 及以后的版本中,还使用红树和黑树来优化性能。
标签:主题安全图的部署,但性能较低,不允许零键和空值。
由于有具体的估算,hashtable的使用频率较低。
Treemap:根据二进制树的实现,可以安排锁。
Treemap支持自定义安排规则。
linkedhashmap:维护一个两道列表以记录元素的顺序,以便可以通过插入或访问顺序的顺序传递元素。
摘要:Java Collection框架提供了丰富的界面和课程,以满足不同方案的需求。
选择使用集合类时,您需要根据方案和特定的应用程序要求选择适当的收集层,以实现最佳性能和结果。

26. 多线程下安全操作 map的方法

在各种环境中,Java提供了几个安全的地图实施,以确保同时操作中数据的安全。
使用此安全地图实施可以促进开发过程并防止数据不一致。
如果需要进一步的控制,您可以选择使用键或其他会议控制机制,例如Reentrantlock,Smahaphore,Countdown Latch等。
但是,这种方法需要更多的编程工作,而使用不当会导致数据的僵局或不一致。
使用Collection.synchronizedmap(),任何映射对象都可以作为安全版本包装。
该方法使用在所有方法中同步的关键字,仅限制一个线程以同时访问地图,但可能会影响同意性能,尤其是与实现其他地图(例如Concurrenthashmap)相比。
在多线程环境中执行复合操作时,需要其他手动同步以防止其他线程在操作过程中修改地图。
Reentrantlock是同时编程Java的重要工具,提供了一个静音键。
与同步关键字相比,它更灵活,更有用,例如尝试获取钥匙,令人不安的获取密钥,公平和不公平的钥匙选择。
当正确使用重新输入时,您需要注意关键获取和释放操作的清晰度,以避免由于忘记释放未能正确释放它的密钥或异常情况而引起的僵局问题。
信号量用于信号量计数,用于管理资源访问并限制线程数量。
池控制源控制通过信号量,使线程在获得许可后继续实现。
如果权限的数量为零,则将阻止到其他线程释放的源。
这种机制通常用于抑制同时访问并确保资源有效且安全的利用。