当前位置: 首页 > news >正文

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、超大数据批量计算
http://www.cnnetsun.cn/news/3379121.html

相关文章:

  • 施耐德Unity Pro XL授权管理实战:从虚拟盘到网络浮动许可
  • 数据库多语言存储:从加列到翻译表的五种方案深度解析
  • 意大利语购物场景实战:从15欧元报价到成交的完整表达解析
  • ArkUI 搜索空结果怎么办:中式美食搜不到菜时怎么给同义词、推荐词和清空入口
  • 一键转换视频为WebM:FFmpeg全攻略
  • Hermes Agent实战指南:23分钟掌握智能代理部署与自进化记忆系统
  • C#核心(持续更新中)
  • Vibe Coding的移动端革命:在手机上写代码是一种怎样的体验?
  • OpenCvSharp实战:巧用凸包缺陷分割粘连目标与精确定位
  • AI图像生成提示词工程:从“AI美女 车上好热”看多概念融合技术
  • ACCESS从零到一:构建你的第一个关系型数据库
  • 基于FPGA的以太网ARP协议实现
  • openeuler/compliance:开源合规管理的终极指南与工具集
  • 程序员正在悄悄淘汰的手动注释方式,而顶尖团队已用ChatGPT实现注释覆盖率100%(内部白皮书节选)
  • 多店铺业绩目标完成率自动统计,老板喜欢的日报来了 —— 跨系统数据集成与自动化日报技术测评
  • 物联网云平台是什么?有什么推荐?
  • 免费开源的PDF差异检测工具:5分钟快速上手diff-pdf
  • 深度技术解析:如何高效修复损坏MP4/MOV视频文件的专业指南
  • 多模态AI健康助手:架构、优化与应用实践
  • 智能单词记忆系统:提升小升初英语效率的解决方案
  • 2000-2025年各省、市气候政策不确定性指标CPU月度年度
  • GitHub Copilot SDK与混合AI实现README转PPT自动化
  • 【Springboot毕设全套源码+文档】基于springboot拍卖网站的设计与实现(丰富项目+远程调试+讲解+定制)
  • 开源OCR引擎Tesseract实战:从环境搭建到多语言识别
  • 4K修复技术与系统调试思维:从《黑暗边缘》解析影视工程实践
  • AI大模型赋能11大行业:从金融到医疗的全方位应用指南
  • Python通达信数据获取终极指南:5分钟掌握股票数据分析利器
  • AI Code终端系统:从指令驱动到任务自治的演进
  • 5分钟快速上手:鸣潮自动化工具全面指南
  • 综合实力最强的国际EMBA怎么选?2026避坑选购推荐攻略