12、Java 基础硬核复习:集合框架(数据容器)的核心逻辑与面试考点

12、Java 基础硬核复习:集合框架(数据容器)的核心逻辑与面试考点

一、核心知识体系:集合框架的"两大体系"与"三大分支"

本章的知识围绕"集合框架概述、Collection接口、Map接口、工具类"展开,可归纳为两大体系 (Collection、Map)和三大分支(List、Set、Map)。

1. 集合框架概述:Collection与Map的区别

集合框架是Java中用于存储和操作对象的容器,核心分为两大体系:

  • Collection :存储单个元素 的集合(如ListSet),继承自Collection接口;
  • Map :存储**键值对(key-value)**的集合(如HashMapTreeMap),不继承Collection接口。

2. Collection接口:常用方法与迭代器

Collection是集合框架的根接口,定义了所有集合的通用方法,需掌握其核心方法及迭代器机制:

  • 常用方法add()(添加元素)、remove()(删除元素)、contains()(判断是否存在)、size()(获取元素个数)、iterator()(获取迭代器)。
  • 迭代器(Iterator) :用于遍历集合,核心方法hasNext()(判断是否有下一个元素)、next()(获取下一个元素)。
  • 增强for循环(foreach) :底层基于迭代器实现,简化集合遍历(如for (String s : list) { ... })。

3. List接口:有序、可重复的集合

ListCollection的子接口,特点是有序、可重复,常用实现类包括:

  • ArrayList :基于动态数组 实现,查询快(O(1))、增删慢(O(n)),线程不安全(推荐使用)。
    • 扩容机制:默认容量10,每次扩容为原来的1.5倍(newCapacity = oldCapacity + (oldCapacity >> 1))。
  • LinkedList :基于双向链表实现,增删快(O(1))、查询慢(O(n)),线程不安全。
  • Vector :基于动态数组实现,线程安全(方法用synchronized修饰),效率低(不推荐使用)。

4. Set接口:无序、不可重复的集合

SetCollection的子接口,特点是无序、不可重复,常用实现类包括:

  • HashSet :基于哈希表 实现,无序(插入顺序与遍历顺序无关),查询快(O(1)),线程不安全。
    • 去重原理:依赖HashMapkeyHashSet内部用HashMap存储,元素作为keyvalue固定为PRESENT)。
  • LinkedHashSet :基于链表+哈希表实现,有序(插入顺序与遍历顺序一致),查询快(O(1)),线程不安全。
  • TreeSet :基于红黑树实现,有序(自然排序或定制排序),查询快(O(log n)),线程不安全。

5. Map接口:键值对集合

Map是键值对集合,常用实现类包括:

  • HashMap :基于哈希表 实现,无序(插入顺序与遍历顺序无关),查询快(O(1)),线程不安全(推荐使用)。
    • 底层结构:JDK8之前是数组+链表 ,JDK8之后是数组+链表+红黑树(链表长度超过8且数组长度超过64时,链表转为红黑树)。
    • put流程:计算key的哈希值→定位数组索引→若索引为空,直接插入;若不为空,判断是否为key相同(equals),相同则覆盖;不同则解决哈希冲突(链表/红黑树)。
  • LinkedHashMap :在HashMap基础上增加链表维护插入顺序。
  • TreeMap :基于红黑树 实现,按Key排序(自然排序或定制排序),查询快(O(log n)),线程不安全。
  • Hashtable :基于哈希表实现,线程安全(方法用synchronized修饰),效率低(不推荐使用),不允许null key/value。
  • PropertiesHashtable的子类,用于存储配置文件 (键值对为String类型),常用load()(加载配置文件)、store()(保存配置文件)。

6. 工具与遍历

  • Iterator(迭代器) :用于遍历Collection,核心方法hasNext()next()remove()
  • 增强for循环:语法糖,底层基于迭代器实现。
  • Collections工具类 :提供排序(sort)、同步集合(synchronizedList)、查找(binarySearch)等静态方法。

二、高频面试考点:必考"死穴",掌握这些=掌握集合框架核心

本章的面试题含金量极高,HashMap 是重灾区,以下是必考考点

1. ArrayList vs LinkedList(必考 Top1)

  • 考点:底层结构与性能差异?
  • 答案
    • ArrayList :底层是动态数组 ,内存连续,支持下标访问,查询快(O(1)) ;增删需移动元素,增删慢(O(n))
    • LinkedList :底层是双向链表 ,插入删除只需改指针,增删快(O(1)) ;内存不连续,无法下标访问,查询慢(O(n))
    • 结论 :查询多的场景用ArrayList;增删多的场景用LinkedList

2. HashMap的底层实现原理(大厂必问)

  • 考点:JDK7和JDK8的区别?什么时候转红黑树?
  • 答案
    • 基本结构 :底层是Entry数组 (JDK8叫Node),通过hash(key)计算下标。哈希冲突用链地址法(链表/红黑树)。
    • JDK8优化 :链表长度超过8 且数组长度超过64 时,链表转为红黑树 ,将查找复杂度从O(n)降到O(log n)

3. HashMap vs Hashtable

  • 考点:区别是什么?
  • 答案
    1. 线程安全HashMap线程不安全;Hashtable线程安全(方法用synchronized)。
    2. Null值HashMap允许null key(1个)和null value(多个);Hashtable不允许null key/value。
    3. 效率HashMap效率更高。

4. HashSet如何保证元素唯一性?

  • 考点 :只重写equals不重写hashCode行不行?
  • 答案不行
    • 机制 :先计算hashCode()确定"坑位",若坑位无元素则直接存;若有元素,比较hashCode,再调用equals()比较内容。只有两者都相同才认为是重复元素。

5. 遍历集合时删除元素

  • 考点 :在for循环里调用list.remove()会发生什么?
  • 答案 :会报ConcurrentModificationException(fail-fast机制)。
    • 解决 :必须使用迭代器的iterator.remove()方法。

6. Comparable vs Comparator

  • 考点 :在TreeSetCollections.sort中怎么用?
  • 答案
    • Comparable(内部):类实现compareTo,定义"自然排序"(如StringInteger)。
    • Comparator(外部):定义单独的比较器传进去,定义"定制排序"(更灵活,不修改源码)。

三、学习建议:从"理论"到"实践"的跃迁

  1. 手写代码 :熟练写出ArrayList的增删改查和HashMap的遍历(EntrySet/KeySet)。
  2. 看源码 :阅读ArrayList的扩容机制(默认容量10,扩容1.5倍)和HashMapput方法,理解底层原理。
  3. 对比总结 :对比ArrayListLinkedListHashMapHashtableHashSetTreeSet的区别,加深记忆。

四、总结:集合框架是"Java数据管理"的核心

第12章是"集合框架"的硬核复习,它将你从"掌握语法"带入"高效管理数据"的层面。掌握这些知识,你就能写出更高效的代码,也能在面试中轻松应对"Java基础"的"高频考点"。

记住,集合框架是Java开发的"数据容器" ------熟练使用ListSetMap,是成为优秀Java开发者的"基本功"。

相关推荐
发现一只大呆瓜2 分钟前
Vite 开发预构建机制详解,搞懂 esbuild 与 Rollup 分工差异
前端·面试·vite
我是一颗柠檬2 分钟前
【JavaSE全面教学】Java集合框架下Day13(2026年)
java·开发语言·intellij-idea
吃好睡好便好4 分钟前
用if…end…语句计算分段函数
开发语言·人工智能·学习·算法·matlab
vx-程序开发10 分钟前
基于机器学习的动漫可视化系统的设计与实现-计算机毕业设计源码08339
java·c++·spring boot·python·spring·django·php
风继续吹..12 分钟前
C# 文件 IO 实操练习题 5道
开发语言·c#
计算机魔术师28 分钟前
【AI面试八股文 Vol.3.4:训练微调部署选型】从预训练到量化部署:LLM 工程落地如何做模型选择
人工智能·后端·面试·架构·moe·vol.3.3·vol.3.4
LCG元40 分钟前
RAG工程指南:从基础检索到生产部署全解析
java·运维·数据库
Dust-Chasing1 小时前
Claude Code源码剖析 - Phase3
开发语言·人工智能·学习
石榴树下的七彩鱼1 小时前
医疗票据 OCR 识别 API 多场景落地指南:医保结算 + 商保理赔 + 医疗信息化(附 Python/Java 完整示例)
java·python·ocr·石榴智能·医疗票据ocr·医保结算·ocrapi
C137的本贾尼1 小时前
Spring AI Alibaba 开箱:国产百炼大模型初体验
java·人工智能·spring