news 2026/7/14 18:51:25

Java 30 组技术知识点表格对比

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 30 组技术知识点表格对比

1. ArrayList VS LinkedList

表格

对比维度ArrayListLinkedList
底层结构动态数组,连续内存双向链表,离散节点
随机下标查询O (1),速度极快O (n),需要遍历节点
尾部新增元素无扩容时很快,扩容需数组复制仅修改指针,无数组拷贝
头部 / 中间增删元素移位,性能差仅修改前后指针,速度快
内存占用仅存储数据,开销小每个节点存 prev、next 指针,内存开销大
遍历推荐方式普通 fori、foreach 均高效禁止 fori 遍历,仅 foreach
适用场景查询多、尾部新增频繁,绝大多数业务频繁头尾插入删除、用作队列 / 栈

2. HashMap VS ConcurrentHashMap(JDK8)

表格

对比维度HashMapConcurrentHashMap
线程安全线程不安全,并发会丢数据、死循环线程安全
并发锁机制无锁CAS + synchronized 锁住链表 / 红黑树头节点,锁粒度细
null 支持允许 1 个 null key,多个 null valuekey、value 均不允许 null,直接 NPE
并发扩容并发扩容会出现链表循环死链分段迁移,并发扩容安全
底层结构数组 + 链表 + 红黑树数组 + 链表 + 红黑树
适用场景单线程场景多线程并发读写缓存场景

3. HashMap VS LinkedHashMap VS TreeMap

表格

对比维度HashMapLinkedHashMapTreeMap
有序性完全无序插入有序 / 访问有序Key 自然升序排列
底层结构哈希表哈希表 + 双向链表红黑树
读写效率O (1),速度最快O (1),略慢于 HashMapO (logn),速度最慢
排序规则无排序插入顺序 / 访问顺序实现 Comparable 或自定义比较器
典型场景普通键值存储有序遍历、简易 LRU 缓存需要按 key 排序的场景

4. ArrayList VS CopyOnWriteArrayList

表格

对比维度ArrayListCopyOnWriteArrayList
线程安全不安全线程安全
读取性能单线程读取极快无锁读取,多线程读性能优秀
写入性能轻量,开销小写入复制完整数组,开销巨大
遍历并发修改遍历增删抛 ConcurrentModificationException迭代基于快照,无并发修改异常
适用场景单线程操作集合读多写少,配置缓存、白名单

5. synchronized VS ReentrantLock

表格

对比维度synchronizedReentrantLock
底层实现JVM 底层内置,自动释放AQS 同步队列,API 手动控制
公平锁仅非公平锁支持公平 / 非公平锁切换
阻塞中断阻塞后不可中断lockInterruptibly () 支持中断等待
限时等待不支持tryLock (时间),超时自动放弃竞争
释放规则代码块执行完自动释放必须在 finally 手动 unlock,否则死锁
多条件等待仅 1 个 wait 等待队列支持多个 Condition 条件变量

6. volatile VS synchronized

表格

对比维度volatilesynchronized
可见性保证变量可见性保证可见性
原子性不保证,i++ 等复合操作不安全保证操作原子性
指令重排禁止读写前后指令重排完全禁止临界区内指令重排
锁机制无锁,轻量级独占互斥锁,存在线程上下文切换
适用场景布尔状态标记、双重检查锁单例多线程复合操作、计数、数据修改

7. Runnable VS Callable

表格

对比维度RunnableCallable
方法返回值run () 无返回值call () 支持泛型返回值
受检异常不可抛出,只能内部捕获可抛出任意受检异常
线程池返回结果submit 无返回对象submit 返回 Future,可获取执行结果
使用场景无需获取任务执行结果异步任务需要返回数据、捕获异常

8. CountDownLatch VS CyclicBarrier

表格

对比维度CountDownLatchCyclicBarrier
复用性一次性,计数归零无法重置可循环复用,等待完成自动重置
等待逻辑一组子任务执行完,主线程等待多个线程互相等待,全部到达屏障再一起执行
典型场景主线程等待批量查询、多接口汇总计算多线程分段计算,全部完成后合并结果

9. parallelStream VS CompletableFuture 自定义线程池

表格

对比维度parallelStreamCompletableFuture (自定义线程池)
线程池来源全局共享 ForkJoinPool开发者自定义隔离线程池
IO 阻塞影响IO 阻塞任务会拖垮全局所有并行流任务隔离,互不影响其他业务
线程数量控制固定等于 CPU 核心数,无法自定义可自由设置核心、最大线程数
适用场景纯内存、无 IO 大数据计算RPC、数据库、文件 IO 等阻塞异步任务

10. Stream 中间操作 VS 终止操作

表格

对比维度中间操作 (filter/map/sorted)终止操作 (collect/forEach/count)
执行时机惰性求值,不会立刻执行立即触发整条流计算逻辑
返回值类型返回全新 Stream 对象无 Stream 返回,返回集合 / 数值 / Optional
流消耗不消耗原始流一次性消费流,流直接关闭不可复用
代码生效条件必须搭配终止操作才会执行单独调用即可执行全部链路

11. map() VS flatMap()

表格

对比维度mapflatMap
转换规则一对一转换 T→RT→Stream<R>,拆解嵌套集合
嵌套集合处理生成 Stream<List<T>>,无法扁平化拆解多层嵌套,输出单层流
典型场景实体简单字段映射List<List>、多层集合扁平化处理

12. Optional.orElse() VS orElseGet()

表格

对比维度orElse(T)orElseGet(Supplier)
执行时机无论 Optional 是否为空,参数一定执行仅对象为空时才执行传入方法
参数类型直接传入对象常量无参函数,动态生成对象
性能表现耗时方法会产生无效开销无多余执行,性能更优
推荐场景常量默认值、简单字符串数据库查询、RPC 等耗时操作

13. Optional.of() VS Optional.ofNullable()

表格

对比维度Optional.of()Optional.ofNullable()
入参 null 处理传入 null 直接抛出空指针传入 null 返回 Optional.empty ()
使用前提明确对象一定不为 null不确定对象是否为空,通用场景

14. String 拼接 + VS StringBuilder VS StringBuffer

表格

对比维度字符串 +StringBuilderStringBuffer
线程安全单线程安全非线程安全synchronized 加锁,线程安全
循环性能大量循环生成大量中间字符串,性能极差单线程高性能,推荐首选加锁损耗,性能偏低
编译优化少量拼接编译期优化为 StringBuilder无优化,原生高效拼接无优化
适用场景少量固定字符串拼接单线程循环大量拼接极少多线程并发拼接字符串

15. == VS equals()

表格

对比维度==equals()
基本类型直接比较数值不可使用
引用类型对比内存地址是否相同Object 原生同 ==;String / 包装类重写对比内容
自定义实体永远判断地址需手动重写 equals+hashCode,实现业务字段对比

16. 基本数据类型 VS 包装类

表格

对比维度基本类型 (byte/int 等)包装类 (Integer/Long 等)
存储位置虚拟机栈堆内存创建对象实例
默认值有固定默认值 (int=0)默认 null,可赋值空
空值支持不能赋值 null,编译报错允许 null,易触发空指针
缓存机制无缓存-128~127 缓存池,区间外 == 判断为 false
开销无对象头,内存占用极小存在对象头,内存开销大

17. final 修饰 变量 / 方法 / 类

表格

对比维度final 修饰变量final 修饰方法final 修饰类
修改限制基本类型值不可变;引用地址不可变,内部属性可修改子类无法重写该方法禁止被继承,所有方法隐式 final
性能优化无优化消除动态绑定,轻微优化无动态分派,优化访问速度
代表示例final int MAX = 100工具类内部私有方法String、Integer

18. 抽象类 abstract class VS JDK8 + 接口 Interface

表格

对比维度抽象类接口
构造方法拥有构造方法,供子类调用无构造方法,不能实例化
成员变量支持任意访问修饰符变量变量默认 public static final 常量
继承实现单继承,只能继承一个父类多实现,可同时实现多个接口
代码块支持静态代码块、实例代码块仅 JDK9 支持私有方法,无实例代码块
核心定位抽取子类公共状态与行为定义行为契约,无业务状态

19. 重载 Overload VS 重写 Override

表格

对比维度重载 Overload重写 Override
所在类同一个类中父子继承类之间
方法签名方法名相同,参数列表不同方法名、参数、返回值完全一致
返回值返回值类型无限制协变返回,不能随意修改
访问权限任意权限无限制子类权限不能比父类更严格
受检异常无限制不能抛出比父类更宽泛的受检异常

20. try-with-resources VS 手动 close ()

表格

对比维度try-with-resources手动 finally close
关闭时机实现 AutoCloseable,自动关闭资源必须手动在 finally 执行关闭
异常处理关闭异常作为抑制异常保存堆栈关闭异常会覆盖业务异常
代码简洁度代码精简,无冗余释放逻辑大量冗余 finally 模板代码
泄漏风险几乎无资源泄漏风险忘记 close 会造成文件句柄、连接泄漏

21. Error VS Exception

表格

对比维度ErrorException
异常层级Throwable 顶层分支Throwable 分支,业务异常父类
产生原因JVM 系统致命故障代码逻辑、外部资源业务问题
处理策略无需捕获,程序无法恢复可捕获、自定义兜底处理
典型案例OOM 堆溢出、栈溢出 StackOverflow空指针、IO 异常、参数非法

22. 受检异常 VS 运行时异常

表格

对比维度受检异常 (Exception)运行时异常 (RuntimeException)
编译校验强制 try-catch 或 throws 声明编译无强制校验
触发场景外部不可控资源:文件、网络、数据库代码逻辑错误:空指针、数组越界、参数错误
处理思路预判外部故障,提前捕获兜底修复代码逻辑,提前增加参数校验

23. JVM 栈 VS 堆 VS 元空间 Metaspace

表格

对比维度虚拟机栈元空间 Metaspace
存储内容局部变量、栈帧、方法调用信息所有对象实例、数组类元信息、常量、注解
内存来源JVM 虚拟机内存JVM 堆内存操作系统本地内存
GC 回收方法执行完毕自动销毁,无 GC全程 GC 管理回收类卸载才释放,极少 GC
溢出异常StackOverflowErrorOutOfMemoryError(Java heap space)Metaspace OOM

24. GC 算法:标记清除 / 复制 / 标记整理

表格

对比维度标记清除复制算法标记整理
内存碎片产生大量不连续内存碎片无任何内存碎片无内存碎片,对象规整排列
内存开销仅标记清除,开销小需要预留一半内存作为复制区移动存活对象,开销大
适用区域老年代 CMS 收集器新生代 Minor GC老年代 Serial Old、G1

25. 泛型通配符?extends T VS ? super T

表格

对比维度? extends T(上界)? super T(下界)
读取操作可以安全读取,返回 T 类型读取只能返回 Object,无法强转 T
写入操作无法存入任意对象,编译报错可以存入 T 及其子类对象
设计原则PECS 生产者 ProducerPECS 消费者 Consumer
使用场景读取数据集合 List<? extends User>写入数据集合 List<? super User>

26. Iterator 迭代器 VS fori 普通循环

表格

对比维度Iterator 迭代遍历fori 下标循环
集合增删安全迭代器 remove () 安全,无并发修改异常循环内 add/remove 直接抛异常
下标获取无法获取当前元素下标可自由获取下标,支持随机访问
适用容器所有 Collection 集合仅支持实现 RandomAccess 的集合 (ArrayList)

27. @Transactional public VS private 方法

表格

对比维度public 方法private 方法
AOP 代理拦截CGLIB/JDK 动态代理可拦截代理无法访问私有方法,拦截失效
事务生效情况事务正常开启、提交、回滚注解完全失效,无事务管理
调用限制外部类可直接调用仅本类内部可调用

28. new Thread 手动创建 VS 线程池 ThreadPoolExecutor

表格

对比维度new Thread()ThreadPoolExecutor 线程池
线程复用一次性线程,执行完销毁线程复用,减少创建销毁开销
并发管控无线程上限,线程无限暴涨可控制核心线程、最大并发数
任务策略无阻塞队列、拒绝策略支持阻塞队列、4 种拒绝策略
生产规范禁止线上使用生产环境异步任务强制使用

29. List.subList () VS new ArrayList<>(list) 拷贝

表格

对比维度subListnew ArrayList<>(原集合)
数据关联原集合视图,不产生新数据完整拷贝全新集合,数据隔离
互相影响修改分片 / 原集合双向同步影响两个集合完全独立,互不干扰
内存占用仅创建视图对象,几乎无额外内存占用双倍内存,存储两份数据
clear 效果仅清空分片视图,原集合数据不变新集合清空不影响原始集合

30. stream () 串行流 VS parallelStream 并行流

表格

对比维度stream () 串行流parallelStream () 并行流
执行线程单线程顺序执行全局 ForkJoinPool 多线程并发
遍历顺序严格保证集合原有顺序无法保证元素处理、遍历顺序
阻塞任务无全局线程池污染风险IO/RPC 阻塞会占用公共线程池
数据量适配小数据、有序业务逻辑纯内存、无 IO、超大数据批量计算
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 18:51:13

施耐德Unity Pro XL授权管理实战:从虚拟盘到网络浮动许可

1. 项目概述&#xff1a;施耐德Unity Pro XL授权管理的核心挑战在工业自动化领域&#xff0c;施耐德的Unity Pro XL软件是编程和调试Modicon系列PLC&#xff08;可编程逻辑控制器&#xff09;的行业标准工具。对于每一位自动化工程师、系统集成商或设备维护人员来说&#xff0c…

作者头像 李华
网站建设 2026/7/14 18:51:00

数据库多语言存储:从加列到翻译表的五种方案深度解析

1. 数据库多语言存储的五大方案解析 第一次做国际化项目时&#xff0c;我被数据库里的中文字段难住了——产品经理突然要求支持英文和日文显示。当时我傻乎乎地在每个表里加了en_name、jp_name字段&#xff0c;结果被架构师骂得狗血淋头。后来踩过无数坑才明白&#xff0c;数据…

作者头像 李华
网站建设 2026/7/14 18:47:42

意大利语购物场景实战:从15欧元报价到成交的完整表达解析

在实际意大利语学习过程中&#xff0c;很多初学者会发现&#xff0c;即使掌握了基础的语法和词汇&#xff0c;一旦进入真实的购物、点餐等生活场景&#xff0c;依然会感到手足无措。本文将以一个非常具体且高频的场景——“在意大利商店购物时&#xff0c;如何表达‘15欧&#…

作者头像 李华
网站建设 2026/7/14 18:44:59

一键转换视频为WebM:FFmpeg全攻略

文章目录需求分析1. 安装 FFmpeg2. 字段说明3. 场景一&#xff1a;单条快速命令4. 场景二&#xff1a;致画质&#xff1a;VP9 二遍编码&#xff08;2-pass&#xff0c;画质最优&#xff0c;速度慢&#xff09;5. 场景三&#xff1a;批量转换脚本&#xff08;文件夹内所有视频转…

作者头像 李华
网站建设 2026/7/14 18:44:03

Hermes Agent实战指南:23分钟掌握智能代理部署与自进化记忆系统

在企业级自动化场景中&#xff0c;团队经常面临重复性任务繁重、多平台集成复杂、AI助手缺乏记忆能力等痛点。传统Agent框架要么过于臃肿难以落地&#xff0c;要么无法保留上下文记忆&#xff0c;导致每次交互都像"初次见面"。本文基于实际项目经验&#xff0c;完整拆…

作者头像 李华