电话
400 9058 355
数组长度固定、不支持泛型、缺乏内置操作,而集合框架提供标准化实现:ArrayList支持随机访问,HashSet自动去重,TreeSet有序存储,HashMap高效查找,且需注意容量预设、hashCode/equals重写、遍历删除等坑。
因为不用它,你连“存多个学生”都得自己造轮子,还容易出错、低效、难维护。
Java里最原始的容器是数组,但它有硬伤:
int[] scores = new int[5] —— 长度写死,加第6个成绩就ArrayIndexOutOfBoundsException
Student对象以外的类型(泛型缺失前还得靠Object强转)contains、remove、sort等操作,每次都要手写循环ArrayList或HashSet快它不是“多学一个API”,而是把高频数据组织模式标准化、工业化:
ArrayList(查O(1))或Link
edList(中间删插O(1))HashSet(依赖hashCode()+equals())TreeSet(红黑树,O(log n)插入+有序遍历)HashMap(平均O(1)查,但key不能为null除非你用ConcurrentHashMap)LinkedHashSet,一行搞定,不用先new HashSet再转List
这些不是理论问题,是上线后真会抛异常或内存爆掉的点:
ArrayList装上万条日志却没预设容量 → 频繁扩容(1.5倍复制数组),CPU飙升;应写成new ArrayList(10000)
HashMap的key,但忘了重写hashCode()和equals() → 同样内容的两个对象被当成不同key,查不到、删不掉for-each循环里调list.remove() → 立刻ConcurrentModificationException;该用iterator.remove()或list.removeIf(x -> x.isExpired())
集合框架不是“学完就扔”的知识点,它是你每天写if、for、log.info之外,最常打交道的基础设施。选错实现类,可能让接口响应从20ms变成2s;忽略泛型和重写规则,可能埋下线上数据不一致的隐患——这些都不是面试题,是压测报告和监控告警里的真实数字。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...