Java 集合类高阶面试题

1. Java 集合的快速失败(fail-fast)和安全失败(fail-safe)的差别是什么?

​ 快速失败和安全失败都是 java 集合(Collection)的一种错误机制。单线程情况下,遍历集合时去执行增删等改变集合结构的操作;或者多线程情况下,一个线程遍历集合,另一个线程执行增删等改变集合结构的操作。

  • 快速失败,是指失败 / 异常时立即报错,通常会抛出 ConcurrentModificationException 异常,像 java.util 包下面的集合类就是使用这种机制;

  • 安全失败,是指失败 / 异常时直接忽略,java.util.concurrent 包下面的集合类都是使用这种机制。

2. HashMap 和 ConcurrentHashMap 的区别?

基础特性不同

HashMap 的 key 和 value 可以为 null,ConcurrentHashMap 的 key 和 value 不能为 null。

内部数据结构不同

HashMap 在 JDK1.7 中采用的数据结构是数组 + 链表,在 JDK1.8 中采用的数据结构是数组 + 链表 / 红黑二叉树;

ConcurrentHashMap 在 JDK1.7 中采用的数据结构是分段的数组 + 链表,JDK1.8 的内部数据结构采用的数据结构是数组 + 链表 / 红黑二叉树(同 HashMap 一致)。

线程安全不同

HashMap 是非线程安全的

ConcurrentHashMap 是线程安全的

猜你喜欢

转载自www.cnblogs.com/masters-/p/12906871.html