计算机基础知识
  • 关于
  • 系统
    • 操作系统的概念、功能、目标
    • 操作系统的特征
    • 并发和并行的区别
    • 操作系统的发展与分类
    • 操作系统的运行机制和体系结构
    • 中断和异常
    • 用户态、核心态之间的切换是怎么实现的?
    • 系统调用
    • 进程的概念
    • 进程的状态和转换
    • 进程控制
    • 进程通信
    • 线程、多线程模型
    • 程序、进程和作业的关系
    • 处理机调度的概念、层次
    • 进程调度的时机、切换与过程、方式
    • 调度算法的评价指标
    • 批处理系统的调度算法
    • 交互式系统的调度算法
    • 进程同步与进程互斥
    • 进程互斥的软件实现方法
    • 进程互斥的硬件实现方法
    • 信号量机制
    • 用信号量机制实现进程互斥、同步、前驱关系
    • 生产者-消费者问题
    • 多生产者-多消费者问题
    • 吸烟者问题
    • 读者-写者问题
    • 哲学家进餐问题
    • 管程
    • 死锁的概念
    • 死锁的处理策略——预防死锁
    • 死锁的处理策略——避免死锁
    • 死锁的处理策略——检测和解除
  • 网络
    • 计算机网络的概念、组成、功能、分类
    • 标准化工作及相关组织
    • 性能指标之速率、带宽、吞吐量
    • 性能指标之时延、时延带宽积、往返时间RTT、利用率
    • 分层结构
    • OSI参考模型
    • TCP/IP参考模型
    • 5层参考模型
    • http与https的区别
    • TCP和UDP的区别
  • Java
    • Arraylist与LinkedList区别
    • HashMap,HashTable,ConcurrentHash的共同点和区别
  • 数据库
    • 为什么MySQL索引要使用B+树
由 GitBook 提供支持
在本页
在GitHub上编辑
  1. Java

HashMap,HashTable,ConcurrentHash的共同点和区别

HashMap

  • 底层由链表+数组+红黑树实现

  • 可以存储null键和null值

  • 线性不安全

  • 初始容量为16,扩容每次都是2的n次幂

  • 加载因子为0.75,当Map中元素总数超过Entry数组的0.75,触发扩容操作.

  • 并发情况下,HashMap进行put操作会引起死循环,导致CPU利用率接近100%

  • HashMap是对Map接口的实现

HashTable

  • HashTable的底层也是由链表+数组+红黑树实现。

  • 无论key还是value都不能为null

  • 它是线性安全的,使用了synchronized关键字。

  • HashTable实现了Map接口和Dictionary抽象类

  • Hashtable初始容量为11

ConcurrentHashMap

  • ConcurrentHashMap的底层是数组+链表+红黑树

  • 不能存储null键和值

  • ConcurrentHashMap是线程安全的

  • ConcurrentHashMap使用锁分段技术确保线性安全

  • JDK8为何又放弃分段锁,是因为多个分段锁浪费内存空间,竞争同一个锁的概率非常小,分段锁反而会造成效率低。

最后更新于2年前