最近在做一些文件处理相关的项目,其中大量用到了集合,因此,本篇着重对集合相关基础知识进行整理。如有希望补充的地方,请评论区留言。

一、Java的几种集合

        再来看看常用的几种集合

二、每种集合的区别

这个问题,可以说是老生常谈了,这里只做简单对比,详细信息请自行翻阅资料。

三、常用的集合操作方法

1. 迭代器

适用所有集合;显式控制遍历流程、支持删除操作适用于需要动态修改集合的场景

                        

2. 传统的for循环

适用于数组或固定大小的集合;基于索引访问元素,性能稳定,但灵活性低

                        

3. 增强版for循环(For-each)

实现了Iterable接口的集合;语法简洁编译后转化为迭代器实现,避免显式迭代器;简洁易读,但无法修改集合

                        

4. Lambda表达式

用于过滤(filter)和转换(map)集合元素;Java 8及以上版本;函数式编程风格,代码更简洁,但代码开销略大                                  

5. Stream API  流式操作

支持去重(distinct)和排序(sorted)操作;声明式操作,支持链式调用和并行处理,性能优于传统for循环

                        

6. 并行流遍历

需要并行处理的集合;自动多线程处理,适合大数据量场景,有效提升性能(需注意线程安全)

                        

四、Stream 和Lamba的效率

1. Lambda表达式开销大原因‌

  • 匿名内部类实现‌:早期Java版本中,Lambda表达式通过匿名内部类实现,每次创建都会生成新的类实例,导致内存消耗增加。
  • 字节码生成复杂‌:Lambda表达式编译后需生成动态方法调用(invokedynamic指令),增加了字节码复杂度和类加载开销。
  • 对象创建频繁‌:在循环中使用Lambda(如forEach)会频繁创建函数式接口实例,增加GC压力。
  • 不可变性要求‌:函数式编程强调数据不可变性,频繁创建临时对象导致内存开销。

2. Stream流开销大原因‌

  • 中间操作延迟执行‌:Stream的中间操作(如filter、map)返回新流对象,延迟执行导致对象生命周期长。
  • 对象链生成‌:链式操作(如stream().filter().map().collect())会生成多个临时流对象,增加内存占用。
  • 并行流线程管理‌:并行流通过ForkJoinPool管理线程,线程上下文切换和任务拆分增加开销。
  •  不可变性限制‌:Stream操作不可变,无法修改源数据,需创建新对象导致额外开销。

3. Lambda和Stream性能优化建议‌

  • 缓存Lambda表达式‌:避免在循环中重复创建Lambda实例,使用方法引用或缓存Lambda。
  • 选择合适场景‌:小数据集或性能敏感场景优先使用传统循环,大数据集可考虑并行流。
  • 减少中间操作‌:合并链式操作(如filter().map()合并为map())减少临时对象生成。
  • 避免共享状态‌:并行流操作需确保线程安全,避免修改外部变量。

五、函数式编程 FP

函数式编程是以数学函数为核心、强调纯函数与不可变数据的声明式编程范式。

1. 核心特点

  • 纯函数‌:函数无副作用,输入相同输出相同,不修改外部状态。
  • 不可变性‌:数据不可变,修改操作返回新对象。
  • 高阶函数‌:函数作为参数或返回值。
  • 声明式编程‌:描述操作而非实现细节。
  • 函数组合:小函数组合成复杂逻辑。

 2. 优势

  • ‌ 简洁性‌:代码更简洁,易于测试和维护。
  • ‌ 并行性‌:天然支持并行处理(如Java Stream的并行流)。
  • ‌ 可重用性‌:函数可复用,减少代码冗余。

六、面向对象编程 OOP

面向对象编程是一种以‌对象‌为核心的软件开发方法和编程范式,它将数据和相关操作封装在一起,更贴近人类认识世界的方式。

1. 四大基本特性

  • 封装:把属性和方法打包进类,隐藏内部细节,只暴露对外接口。

  • 继承:子类复用父类代码,减少重复,实现代码复用。

  • 多态:同一行为,不同对象表现不同效果。

  • 抽象:抽取共性特征,提炼成类模型。

2. 核心概念

  • 类 Class:模板,定义属性、行为
  • 对象 Object:类实例,真实个体
  • 成员变量:对象状态数据
  • 成员方法:对象动作行为
  • 构造方法:创建对象时初始化

       

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐