欢迎光临
我们一直在努力

Java 集合面试题总结(超详细版)

Java 集合是 Java 面试中出现频率最高的内容之一。无论是初级还是高级 Java 开发岗位,集合相关问题几乎是必问的。

常见问题包括:

  • Java 集合体系结构

  • List、Set、Map 的区别

  • ArrayList 和 LinkedList 的区别

  • HashMap 的底层实现

  • HashMap 为什么是线程不安全

  • HashMap 和 Hashtable 的区别

  • HashSet 为什么不允许重复

  • ConcurrentHashMap 原理

本文将系统总结 Java 集合高频面试题。


一、Java 集合体系结构

Java 集合主要分为两大类:

  • Collection

  • Map

  • AI写代码java运行

    1 Collection 体系

    Collection 用于存储 单个元素。

    主要分为:

  • Collection

  • ├── List(有序,可重复)

  • │ ├── ArrayList

  • │ ├── LinkedList

  • │ └── Vector

  • └── Set(无序,不可重复)

  • ├── HashSet

  • ├── LinkedHashSet

  • └── TreeSet

  • AI写代码java运行

    特点:

    集合特点
    List 有序,可重复
    Set 无序,不可重复

    篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了:Java面试、场景题、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc

    需要全套面试笔记及答案【点击此处即可/免费获取】https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1ho

    2 Map 体系

    Map 用于存储 键值对(key-value)。

  • Map

  • ├── HashMap

  • ├── LinkedHashMap

  • ├── TreeMap

  • ├── Hashtable

  • └── ConcurrentHashMap

  • AI写代码

    特点:

    集合特点
    HashMap 无序
    LinkedHashMap 有序
    TreeMap 排序
    Hashtable 线程安全
    ConcurrentHashMap 高并发

    二、List 集合

    List 集合特点:

    • 有序

    • 可重复

    • 可以通过索引访问

    常见实现类:

    • ArrayList

    • LinkedList

    • Vector


    三、ArrayList 面试题

    1 ArrayList 的底层数据结构

    ArrayList 底层是 动态数组。

    transient Object[] elementData;

    AI写代码java运行

    特点:

    • 查询快

    • 插入慢

    • 删除慢

    原因:

    数组需要 移动元素。


    2 ArrayList 扩容机制

    默认容量:

    10

    AI写代码

    当数组不够时:

    扩容为:

    原容量 + 原容量 / 2

    AI写代码

    例如:

    10 → 15 → 22 → 33

    AI写代码

    源码逻辑:

    newCapacity = oldCapacity + (oldCapacity >> 1);

    AI写代码java运行

    优点:

    减少扩容次数,提高效率。


    3 ArrayList 为什么线程不安全

    因为没有加锁。

    例如:

    两个线程同时添加元素:

    size++

    AI写代码

    可能会导致:

    • 数据覆盖

    • 数组越界

    解决方式:

    1️⃣ 使用 Collections.synchronizedList

    List list = Collections.synchronizedList(new ArrayList());

    AI写代码java运行

    2️⃣ 使用 CopyOnWriteArrayList


    四、LinkedList 面试题

    1 LinkedList 底层结构

    LinkedList 底层是 双向链表。

    结构:

    prev ← node → next

    AI写代码java运行

    特点:

    • 插入快

    • 删除快

    • 查询慢


    2 LinkedList 为什么插入快

    因为:

    不需要移动元素。

    只需要修改指针:

  • node.next = newNode

  • newNode.prev = node

  • AI写代码java运行

    时间复杂度:

    O(1)

    AI写代码


    五、ArrayList 和 LinkedList 区别

    对比ArrayListLinkedList
    数据结构 数组 双向链表
    查询
    插入
    删除
    内存

    总结:

    查询多 → ArrayList

    插入删除多 → LinkedList


    六、Set 集合

    Set 的特点:

    • 不允许重复

    • 无索引

    常见实现:

    • HashSet

    • LinkedHashSet

    • TreeSet

       篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了:Java面试、场景题、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc

      需要全套面试笔记及答案【点击此处即可/免费获取】https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1ho


    七、HashSet 面试题

    1 HashSet 为什么不能存重复元素

    因为底层使用 HashMap。

    源码:

    private transient HashMap<E,Object> map;

    AI写代码java运行

    存储结构:

  • key = 元素

  • value = 固定对象

  • AI写代码java运行

    当 key 相同:

    就不会再添加。


    2 HashSet 判断重复的过程

    步骤:

    1️⃣ 计算 hashcode

    hash = key.hashCode()

    AI写代码java运行

    2️⃣ 找到数组位置

    index = hash % length

    AI写代码java运行

    3️⃣ 比较 equals()

    如果:

  • hashCode 相同

  • equals 为 true

  • AI写代码

    则认为是重复元素。


    八、HashMap 面试题(重点)

    HashMap 是 Java 面试必问。


    1 HashMap 底层结构(JDK8)

    JDK8 使用:

    数组 + 链表 + 红黑树

    AI写代码

    结构:

  • 数组

  • 链表

  • 红黑树

  • AI写代码

    当链表长度:

    >= 8

    AI写代码

    就会转换成:

    红黑树

    AI写代码

    这样可以提高查询效率。


    2 HashMap 默认容量

    默认容量:

    16

    AI写代码

    负载因子:

    0.75

    AI写代码

    扩容条件:

    容量 × 负载因子

    AI写代码

    例如:

    16 × 0.75 = 12

    AI写代码

    当元素超过 12 时扩容。


    3 HashMap 扩容机制

    扩容:

    容量 × 2

    AI写代码

    例如:

    16 → 32 → 64

    AI写代码

    扩容时会进行:

    rehash(重新计算位置)

    AI写代码


    4 HashMap 为什么线程不安全

    因为:

    多个线程同时操作可能导致:

    • 数据覆盖

    • 死循环

    • 数据丢失

    JDK7 中甚至可能出现:

    CPU 100%

    AI写代码


    5 HashMap 和 Hashtable 区别

    对比HashMapHashtable
    线程安全 不安全 安全
    null 可以 不可以
    性能
    出现时间 JDK1.2 JDK1.0

    Hashtable 使用:

    synchronized

    AI写代码

    所以效率较低。


    九、ConcurrentHashMap 面试题

    ConcurrentHashMap 是:

    线程安全的 HashMap

    特点:

    • 高并发

    • 高性能


    JDK7 实现

    采用:

    Segment 分段锁

    AI写代码

    结构:

  • Segment[]

  • HashEntry[]

  • AI写代码

    不同 Segment 可以同时操作。


    JDK8 实现

    JDK8 使用:

    CAS + synchronized

    AI写代码

    锁粒度更小。

    性能更高。


    十、TreeMap 面试题

    TreeMap 底层是:

    红黑树

    AI写代码

    特点:

    • 自动排序

    • key 不能为 null

    排序方式:

    1️⃣ 自然排序

    2️⃣ Comparator

    示例:

    TreeMap<Integer,String> map = new TreeMap<>();

    AI写代码java运行

     篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了:Java面试、场景题、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc

    需要全套面试笔记及答案【点击此处即可/免费获取】https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1ho


    十一、Java 集合遍历方式

    常见遍历方式:

    1 for 循环
  • for(int i=0;i<list.size();i++){

  • System.out.println(list.get(i));

  • }

  • AI写代码java运行


    2 增强 for
  • for(String s : list){

  • System.out.println(s);

  • }

  • AI写代码java运行


    3 Iterator
  • Iterator it = list.iterator();

  • while(it.hasNext()){

  • System.out.println(it.next());

  • }

  • AI写代码java运行


    十二、fail-fast 机制

    很多集合有 fail-fast 机制。

    当集合被修改时:

    会抛出异常:

    ConcurrentModificationException

    AI写代码

    例如:

  • for(String s : list){

  • list.remove(s);

  • }

  • AI写代码java运行

    解决方法:

    使用:

    Iterator.remove()

    AI写代码java运行


    十三、Java 集合高频面试题总结

    面试官最喜欢问:

    1️⃣ Java 集合体系结构 2️⃣ ArrayList 和 LinkedList 区别 3️⃣ ArrayList 扩容机制 4️⃣ HashMap 底层结构 5️⃣ HashMap 为什么线程不安全 6️⃣ HashMap 扩容机制 7️⃣ HashMap 为什么长度是 2 的幂 8️⃣ HashSet 为什么不重复 9️⃣ ConcurrentHashMap 原理 🔟 fail-fast 机制

    赞(0)
    未经允许不得转载:171主机测评 » Java 集合面试题总结(超详细版)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址