首页 > 编程知识 正文

hashtable底层数据结构,hashtable的使用

时间:2023-05-05 11:37:13 阅读:51098 作者:3160

HashMap与Hashtable的比较是Java面试中的一个常见问题,它用于测试程序员是否可以正确使用集合类,以及是否可以随机应变地使用多种想法来解决问题。 混图机制、ArrayList与Vector的比较,以及这个问题是关于Java集合框架最典型的问题。 Hashtable是一个过时的集合类,长期存在于Java API中。 由于在Java 4中被改写并实现了Map接口,因此以后也成为了Java集合框架的一部分。 Hashtable和HashMap在Java面试中相当容易被问到,成为集合框架面试问题中最常见的问题,所以在参加任何Java面试之前,请不要忘记准备这个问题。

在这篇文章中,我们不仅看到了HashMap和Hashtable的区别,还看到了相似之处。

混洗映射和混洗表的区别

HashMap和Hashtable都实现了Map接口,但在决定使用哪一个之前必须弄清它们之间的区别。 主要区别在于线程安全、同步和速度。

HashMap几乎等效于Hashtable,并且可以接受null,除非HashMap是非同步的。 (HashMap被接受为空关键帧值(key )和值),但Hashtable不被接受。 )。

HashMap是非同步的,Hashtable是同步的。 这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable。 如果没有正确的同步,则多个线程不能共享HashMap。 Java 5提供了ConcurrentHashMap而不是HashTable,与HashTable相比具有更好的可扩展性。

另一个区别是,HashMap的迭代器(Iterator )是故障快速迭代器,而Hashtable的枚举器不是故障快速迭代器。 因此,如果其他线程更改了HashMap的结构(添加或删除了元素),则会抛出concurrentmodificationexception,但在迭代器自己的remove )方法中删除元素时,concurrent modification仍然会保留但是,这不是一定会发生的行为,必须看JVM。 这也是枚举和迭代器的区别。

由于Hashtable是线程安全的、已同步的,因此在单线程环境中比HashMap慢。 如果不需要同步,而只需要单个线程,则使用HashMap比Hashtable提供更好的性能。

HashMap并不保证随着时间的推移,Map内的元素顺序一定。

需要注意的重要术语:

1 )同步意味着一次只能有一个线程修改Hashtable。 也就是说,当其中一个线程更新Hashtable时,它会首先获取同步锁定,而其他线程在同步锁定解除之前不会再次获取同步锁定,而是更新Hashtable。

2 )故障安全与迭代器相关。 如果集合对象创建Iterator或ListIterator,而另一个线程尝试“从结构上”更改集合对象,则会抛出concurrentmodificationexception异常。 但是,其他线程可以使用set ) )方法修改集合对象,因为它们在结构上没有修改集合。 但是,如果在调用set )方法之前对结构进行了更改,则会抛出IllegalArgumentException异常。

3 )结构变更是指删除或插入影响map结构的因素。

可以同步HashMap吗?

可以通过以下语句同步HashMap :

mapm=collections.synchronize map (hashmap );

结论

Hashtable和HashMap有几个主要区别:线程安全和速度。 请仅在需要完整的线程安全时使用Hashtable,在使用Java 5或更高版本时使用ConcurrentHashMap。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。