Java中Hashtable和HashMap之间的区别

时间:2020-02-23 14:34:06  来源:igfitidea点击:

"Hashtable和HashMap之间有什么区别"

当我开始使用它们时,我使用了任何一个,而不管他们的差异如何,我发现它们之间的明显差异可能会影响应用程序的性能。

Hashmap.

HashMap实现映射键的映射键。

它不同步,并且不是线程安全的。
不允许重复键,允许为null键以及值。

HashMap<Interger,String> employeeHashmap=new HashMap<Integer,String>();
employeeHashmap.put(1,"Arpit");
employeeHashmap.put(2,null);  //will work fine

哈希表

Hashtable实现映射键的映射接口。

它是同步和线程安全的。
不允许重复键,不允许键密钥。

Hashtable<Interger,String> employeeHashmap=new Hashtable<Integer,String>();
employeeHashmap.put(1,"Arpit");
employeeHashmap.put(2,null);  //not allowed and will throw NullPointer exception at run time

hashtable vs hashmap:

参数hashtablehashmap
线程安全no
同步no
性能由于TheadSafe和同步,它通常比HashMap 慢在单线程环境中,它比hashtable快得多。所以如果我们在多线程环境中不起作用,则HashMap是推荐
null键不允许允许空键以及值
fail fasthashtable中的枚举不是fakeHashMap中的迭代器是Fair Fast
扩展它扩展了非常旧的字典类它扩展了抽象amp class
替代没有替代品我们可以使用concurrenthashmap进行多线程环境

需要讨论一些重要的观点。

  • 同步意味着只有一个线程可以在一个时间点修改一个表。当任何线程对Hashtable执行更新操作时,它会在其上获取锁定并且其他线程必须等待锁定锁定。
  • 失败 - 快速迭代器意味着一个线程迭代HashMap和尝试修改HashMap的其他线程,它将抛出并发映射异常并立即失败。结构修改意味着插入或者删除可以改变地图结构的元件。

我们可以同步HashMap吗?

是的,我们也可以在Collections.SynchonizedMap(HashMap)的帮助下同步HashMap,所以HashMap可以同步

Map map=Collections.synchonizedMap(hashmap)