news 2026/4/22 3:33:34

为什么 ArrayList 的 elementData 加上 transient修饰?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
为什么 ArrayList 的 elementData 加上 transient修饰?

文章目录

      • 1. 核心矛盾:空间浪费
      • 2. 为什么加 `transient`?
      • 3. 如何“理解”图片中的 `writeObject` 代码?
      • 4. 这样做的好处(总结)
      • 5. 额外的一点:那行 `modCount != expectedModCount`

这是一个关于“性能优化”“精准控制”的非常经典的设计案例。

简单来说,ArrayList里的elementData数组就像是一个有 100 个座位的电影院,但此时可能只有 10 个人在看电影。


1. 核心矛盾:空间浪费

  • 默认序列化:如果不加transient,Java 会把整个elementData数组(100 个位置)全部序列化。这意味着它会花费空间和时间去记录后面那 90 个null
  • ArrayList 的扩容机制:为了保证性能,ArrayList往往会预留空间(比如你只存了 10 个元素,但它可能已经申请了 16 或 24 个位置)。

2. 为什么加transient

为了**“拒绝默认,手动接管”**。
标记为transient后,Java 的默认序列化机制就会无视这个数组。然后,ArrayList开发者通过重写writeObject方法,实现了一套“按需打包”的方案。

3. 如何“理解”图片中的writeObject代码?

你可以把这段代码看作是一个精明的搬家公司经理

  1. s.defaultWriteObject()先把那些不是transient的普通属性(比如size变量)按规矩打包好。
  2. s.writeInt(elementData.length)记录一下当前的“总容量”,这样回来复原时知道要开多大的房间。
  3. 核心逻辑(那个for循环):
    for(inti=0;i<size;i++)s.writeObject(elementData[i]);
    • 重点:它只循环到size,而不是elementData.length
    • 效果:电影院有 100 个座,经理只登记了坐了人的那 10 个位置。后面 90 个空位直接无视。

4. 这样做的好处(总结)

维度默认序列化(不加 transient)ArrayList 的做法(加 transient)
文件大小很大(包含大量null很小(只存有效数据)
传输速度慢(废话多)(全是干货)
恢复效率略低

5. 额外的一点:那行modCount != expectedModCount

图片代码里还有一行检查。这是为了防止在你“打包”的过程中,另一个线程突然改了 List 的内容。如果改了,它会直接抛出ConcurrentModificationException报错。这就是我们之前讨论的,它在努力保证操作过程的安全性。

一句话总结:
transient不是为了不存数据,而是为了只存有效数据,把那些占地方的空位(null)给剔除掉。

这个“按需打包”的思路,你觉得在你自己写代码时,还有哪些场景能用上?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 3:27:28

预写作:你忽略的学术环节,好写作AI正在帮你悄悄补上

提到“好写作AI”&#xff0c;很多人的第一反应是“写论文的”。如果你也这么想&#xff0c;那你就把这位智能助手的价值低估了至少70%。今天我想跟你聊的&#xff0c;是学术写作中一个被严重低估的阶段——“预写作”。 在动笔之前&#xff0c;你的大脑在做什么&#xff1f; …

作者头像 李华
网站建设 2026/4/22 3:27:27

好写作AI:学术合规的双重围剿,用一个工具打两场仗

2026年的毕业论文季&#xff0c;比往年多了一层焦虑。 打开你的学校通知&#xff0c;大概率会看到两条红线并列出现在同一份文件里&#xff1a;查重率≤20%&#xff0c;AIGC检测率≤30%。四川农业大学的毕业通知里写着&#xff0c;反抄袭检测重复率不超过20%&#xff0c;AIGC检…

作者头像 李华
网站建设 2026/4/22 3:22:22

手把手教你用官方工具制作Win10安装U盘,告别第三方PE和Ghost镜像

微软官方工具制作Win10安装U盘全指南&#xff1a;纯净安装的终极解决方案 当系统运行缓慢或遭遇顽固病毒时&#xff0c;重装Windows往往是最高效的解决方案。但市面上充斥着各种第三方PE工具和Ghost镜像&#xff0c;它们可能暗藏恶意软件、强制捆绑无关程序&#xff0c;甚至修…

作者头像 李华