数组与集合:一个Java程序员的选择困境
今天重学基础,我才真正明白数组和集合该怎么选。这不是语法问题,而是工程思维。
我踩过的两个坑
坑1:过度使用数组
java
// 初学时的想法:数组性能好
User[] onlineUsers = new User[1000];
// 结果:用户量超过1000就崩溃
坑2:无脑用ArrayList
java
// 后来的想法:集合方便
List scores = new ArrayList<>();
// 结果:存储100万个分数,内存爆了
现在我的选择标准
场景1:数据量固定 → 数组
java
// 明确知道数量
int[] daysInMonth = {31,28,31,30,31,30,31,31,30,31,30,31};
// 游戏地图坐标、配置项、枚举值
场景2:数据量不定 → ArrayList
java
// 大部分业务场景
List orders = new ArrayList<>();
// 用户列表、日志记录、查询结果
场景3:需要特殊功能 → 对应集合
java
Set uniqueIds = new HashSet<>(); // 去重
Map<String, User> cache = new HashMap<>(); // 缓存
Queue tasks = new LinkedList<>(); // 队列
性能的真相
我测过:存储100万整数
int[]:4MB内存
ArrayList:约24MB(有装箱开销)
结论:
基本类型大量数据 → 考虑数组
对象类型或少量数据 → 集合差异不大
实用建议
先正确,后优化
java
// 第一步:用ArrayList让功能跑通
List dataList = new ArrayList<>();
// 第二步:如果发现性能问题
if (needOptimization) {
// 考虑数组或其他方案
}
记住常用组合
90%业务代码:ArrayList + HashMap
算法刷题:多用数组(很多题目要求)
配置文件:数组或Properties
不要过早优化
我见过有人为了“性能”用数组实现列表,结果bug频出。ArrayList经过了20年优化,相信标准库。
面试怎么说
如果被问到区别,我这样答:
“数组适合数据量确定的场景,性能好但操作不便;集合适合动态数据,API丰富但有些许性能开销。实际开发中,我根据数据是否可变、是否需要特殊功能来选择,大部分情况用ArrayList,性能敏感时用数组。”
最后心得
技术选型反映的是对问题本质的理解深度。数组和集合没有绝对好坏,只有是否合适。
现在我的原则是:
业务代码优先考虑可维护性(用集合)
底层工具优先考虑性能(考虑数组)
不确定时,选更容易读懂的方案
更多推荐




所有评论(0)