如何提高网站的搜索,网站建设要考,宝塔搭建完wordpress,舟山建设网站公司1、HashMap是线程不安全的#xff0c;HashTable是线程安全的
HashMap#xff1a;Fail-fast 机制。表示快速失败#xff0c;在集合遍历过程中#xff0c;一旦发现容器中的数据被修改了#xff0c;会立刻抛出ConcurrentModificationException异常#xff0c;从而导致遍历失…1、HashMap是线程不安全的HashTable是线程安全的
HashMapFail-fast 机制。表示快速失败在集合遍历过程中一旦发现容器中的数据被修改了会立刻抛出ConcurrentModificationException异常从而导致遍历失败像这种情况定义一个Map集合使用Iterator迭代器进行数据遍历在遍历过程中对集合数据做变更时就会发生Fail-fast。java.util包下的集合类都是快速失败机制的, 常见的的使用Fail-fast方式遍历的容器有HashMap和ArrayList等。HashTable公开的方法比如get都使用了synchronized描述符。而遍历视图比如keySet都使用了Collections.synchronizedXXX进行了同步包装。并且是锁住全局的 Fail-fast底层实现 迭代器在遍历集合的过程会维护一个modCount变量。如果在遍历过程modCount发生变化在迭代器使用hasNext/next遍历下一个元素的时候都会检测modCount是否为expectedModCount的值如果不是抛出异常。 2、由于线程安全HashTable效率比不上HashMap
3、HashMap允许键为NULL值为NULL。HashTable都不允许
HashMap是支持null键和null值的而HashTable在遇到null时会抛出NullPointerException异常。这并不是因为HashTable有什么特殊的实现层面的原因导致不能支持null键和null值这仅仅是因为HashMap在实现时对null做了特殊处理将null的hashCode值定为了0从而将其存放在哈希表的第0个bucket中。
4、HashMap默认初始化数组大小是16HashTable是11。HashMap扩容是扩大两倍HashTable是两倍1
5、HashMap不能直接使用hashCode计算下标而是使用hashCode重新计算Hash值再计算下标。HashTable使用的是hashCode计算下标取mod