HashMap 和 HashTable的异同

HashMap:作为Map的主要实现类;线程不安全的,效率高;存储null的key和value,扩容的话是原来的二倍
Hashtable:作为古老的实现类;线程安全的,效率低;不能存储null的key和value
扩容的话是原来的二倍+1
Propertie:常用来处理配置文件。key和value都是String类型
HashMap的底层:数组+链表 (jdk7及之前) , 数组+链表+红黑树 (jdk 8)

相同点:
(1) 都是java.util包下的类
(2) 都实现了Map接口,存储方式都是key-value形式
(3) 同时也都实现了Serializable和Cloneable接口
(4) 负载因子都是0.75

负载因子(loadFactor):

当我们第一次创建 HashMap 的时候,就会指定其容量(如果未明确指定,默认是 16),随着我们不断的向 HashMap 中 put 元素的时候,就有可能会超过其容量,那么就需要有一个扩容机制。 所谓扩容,就是扩大 HashMap 的容量,在向 HashMap中添加元素过程中,如果 元素个数(size)超过临界值(threshold)的时候,就会进行自动扩容(resize),并且,在扩容之后,还需要对 HashMap 中原有元素进行rehash,即将原来桶中的元素重新分配到新的桶中。
在 HashMap 中,临界值(threshold) = 负载因子(loadFactor) * 容量(capacity)。 loadFactor 是装载因子(负载因子),表示 HashMap 满的程度,默认值为 0.75f,也就是说默认情况下,当 HashMap 中元素个数达到了容量的 3/4 的时候就会进行自动扩容。

不同点:
(1) HashMap是非线程安全,效率高;HashTable是线程安全的,效率低
(2) HashMap允许null作为键或值,HashTable不允许,运行时会报NullPointerException
(3) HashMap添加元素使用的是自定义hash算法,HashTable使用的是key的hashCode
(4) HashMap在数组+链表的结构中引入了红黑树,HashTable没有
(5) HashMap初始容量为16,HashTable初始容量为11
(6) HashMap扩容是当前容量翻倍,HashTable是当前容量翻倍+1
(7) HashMap只支持Iterator遍历,HashTable支持Iterator和Enumeration
(8) HashMap与HashTable的部分方法不同,比如HashTable有contains方法。

相关推荐

  1. HashMap HashTable异同

    2024-04-25 19:36:04       11 阅读
  2. HashmapHashtable区别

    2024-04-25 19:36:04       20 阅读
  3. HashMapHashtable区别(绝对经典)

    2024-04-25 19:36:04       38 阅读
  4. HashMap Hashtable区别底层原理

    2024-04-25 19:36:04       16 阅读
  5. HashMap Hashtable 有什么区别?

    2024-04-25 19:36:04       17 阅读
  6. Hashtable 基本用法及其与 HashMap 区别

    2024-04-25 19:36:04       11 阅读
  7. HashTableConcurrentHashMap区别

    2024-04-25 19:36:04       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-25 19:36:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-25 19:36:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-25 19:36:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-25 19:36:04       20 阅读

热门阅读

  1. Linux c++ 中文字符转十六进制 UTF-8 编码

    2024-04-25 19:36:04       10 阅读
  2. 【React】生命周期

    2024-04-25 19:36:04       12 阅读
  3. 【vue】axios封装拦截

    2024-04-25 19:36:04       12 阅读
  4. Electron vue 进程间消息通行

    2024-04-25 19:36:04       14 阅读
  5. LeetCode-数组中最长的方波

    2024-04-25 19:36:04       14 阅读
  6. history命令

    2024-04-25 19:36:04       12 阅读
  7. 为什么你的项目总延期?多半是没做好5件事

    2024-04-25 19:36:04       11 阅读
  8. 数据结构-分治策略(分治算法)

    2024-04-25 19:36:04       13 阅读