Java Collections框架提供了一组收集类。每个班级都有自己的表现优势和劣势。一些类提供了可以按原样使用的完整实现。其他的则是抽象的,它们提供了用作创建集合的起点的基本实现。集合实现使用synced-wrapper框架提供同步的类,否则实现是不同步的。几个类提供了map接口的实现。
Java平台包含三个通用Map实现:HashMap,TreeMap和LinkedHashMap。 HashMap和Hashtable是Java中的两个集合,用于在哈希表中存储键/值对。 Hashtable是一个同步的Map,而HashMap是一个非同步的Map。但是,如果需要使用同步Map,则Hashtable比在同步包装器中使用HashMap更快。两者都是Java中基于散列的集合,但是它们之间有相当大的区别。我们重点介绍了两者之间的一些关键区别,以帮助您更好地理解术语。
什么是HashMap?
HashMap是基于哈希表的Map实现,该哈希表为插入和定位对提供恒定的性能。 HashMap类提供了基于Hashtable数据结构的地图实现。此实现支持所有Map操作,并允许多个null值,但仅允许一个null键。它使用键/值对将值存储在哈希表中。它是一个未同步的映射,这意味着它不是线程安全的,并且如果没有适当的同步就不能在多个线程之间共享。
什么是Hashtable?
与HashMap不同,Hashtable是一个同步Map,它是线程安全的,这意味着它可以在多个线程之间共享。在哈希表中,您可以指定一个可用作键的对象以及该键附带的值。哈希表借助哈希函数将键映射到值。 Java以Object的hashcode()方法的形式提供此功能,该类重写以提供适当的哈希码。与HashMap不同,Hashtable不支持null值和null键,因为Hashtable的put方法实现中没有null检查。
HashMap和Hashtable的区别
1. HashMap和Hashtable的基础
两者都是Java中基于散列的集合,用于存储键/值对中的数据。 HashMap是基于哈希表的Map实现,该哈希表为插入和定位对提供恒定的性能。 可以使用允许您设置哈希表的容量和负载因子的构造函数来调整性能。 基本的Hashtable与HashMap非常相似,甚至在方法名称下也是如此。 它将键/值对存储在哈希表中。 在哈希表中,可以指定一个可用作键的对象以及该键附带的值。
2. HashMap和Hashtable的同步
HashMap和Hashtable都使用哈希技术来存储基于键的值。与HashMap一样,Hashtable使用键/值对将值存储在哈希表中。但是,两者之间的主要区别在于同步。 HashMap是非同步Map,而Hashtable是同步Map。这意味着HashMap不是线程安全的,没有适当的同步代码就无法在多个线程之间共享。相反,哈希表是线程安全的,并且可以在多个线程之间共享。如果需要使用同步地图,则Hashtable比在同步包装器中使用HashMap更快。
3. HashMap和Hashtable的Null键和Null值
HashMap类提供了基于Hashtable数据结构的地图实现。此实现支持所有Map操作,并允许多个null值,但仅允许一个null键,以便它可以维护唯一的键属性。但是,它不能保证条目的存储顺序。另一方面,哈希表借助哈希函数将键映射到值。与HashMap不同,Hashtable不支持null值和null键,因为Hashtable的put方法实现中没有null检查。
4. HashMap和Hashtable的性能
因为HashMap不是同步Map,所以在性能方面比Hashtable更快,更好,并且实际上比Hashtable使用更少的内存。尽管它们实际上是相同的,但是Hashtable比HashMap慢一些,但比同步的HashMap要快。从本质上讲,将Hashtable与多线程访问一起使用并不安全,因为仅同步了方法。 Hashtable是HashMap的同步副本。与同步对象相比,未同步对象的性能更好,就像哈希表在单线程环境中的性能一样。
总结
HashMap类为您提供了未排序,无序的Map。 因此,当您需要Map而不在乎条目的存储顺序时,HashMap是您的最佳选择。
就像Vector一样,Hashtable早在史前Java时代就已经存在。 就像Vector是更现代,更高级的ArrayList的同步副本一样,Hashtable是HashMap的同步副本。 但是,一个类无法同步,因此当我们说Hashtable是一个同步Map时,这意味着该类的键方法是同步的。
虽然两者实际上是相同的,但差异在于它们的同步方式和性能。 HashMap在多线程环境中表现更好,而Hashtable在单线程环境中表现更好。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:HashMap和Hashtable
本文链接:https://www.vsdiffer.com/vs/hashmap-vs-hashtable.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。