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:
参数 | hashtable | hashmap |
---|---|---|
线程安全 | 是 | no |
同步 | 是 | no |
性能 | 由于TheadSafe和同步,它通常比HashMap 慢 | 在单线程环境中,它比hashtable快得多。所以如果我们在多线程环境中不起作用,则HashMap是推荐 |
null键 | 不允许 | 允许空键以及值 |
fail fast | hashtable中的枚举不是fake | HashMap中的迭代器是Fair Fast |
扩展 | 它扩展了非常旧的字典类 | 它扩展了抽象amp class |
替代 | 没有替代品 | 我们可以使用concurrenthashmap进行多线程环境 |
需要讨论一些重要的观点。
- 同步意味着只有一个线程可以在一个时间点修改一个表。当任何线程对Hashtable执行更新操作时,它会在其上获取锁定并且其他线程必须等待锁定锁定。
- 失败 - 快速迭代器意味着一个线程迭代HashMap和尝试修改HashMap的其他线程,它将抛出并发映射异常并立即失败。结构修改意味着插入或者删除可以改变地图结构的元件。
我们可以同步HashMap吗?
是的,我们也可以在Collections.SynchonizedMap(HashMap)的帮助下同步HashMap,所以HashMap可以同步
Map map=Collections.synchonizedMap(hashmap)