HashMap 和HashTable 的不同点

1 继承和实现方式不同
HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable 接口。
Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable 接口。
2 线程安全不同
Hashtable 它是线程安全的,支持多线程。
而HashMap 它不是线程安全的。
3 对null 值的处理不同
HashMap 的key、value 都可以为null。
Hashtable 的key、value 都不可以为null。
4 支持的遍历种类不同
HashMap 只支持Iterator(迭代器)遍历。
而Hashtable 支持Iterator(迭代器)和Enumeration(枚举器)两种方式遍历。
5 通过Iterator 迭代器遍历时,遍历的顺序不同
HashMap 是“从前向后”的遍历数组;再对数组具体某一项对应的链表,从表头开始进行遍历。
Hashtable 是“从后往前”的遍历数组;再对数组具体某一项对应的链表,从表头开始进行遍历。
6 容量的初始值和增加方式都不一样
HashMap默认的容量大小是16;增加容量时,每次将容量变为“原始容量x2”。
Hashtable 默认的容量大小是11;增加容量时,每次将容量变为“原始容量x2+ 1”。
7 添加key-value 时的hash 值算法不同
HashMap 添加元素时,是使用自定义的哈希算法。
Hashtable 没有自定义哈希算法,而直接采用的key 的hashCode()。
8 部分API 不同
Hashtable 支持contains(Object value)方法,而且重写了toString()方法;
而HashMap 不支持contains(Object value)方法,没有重写toString()方法。

posted @ 2020-12-16 22:44  海绵-宝宝  阅读(96)  评论(0编辑  收藏  举报