当前位置: 首页 > 面试题库 >

为什么ArrayList使用瞬态存储?

仲智
2023-03-14
问题内容

我正在阅读Java的ArrayList的源代码,并且遇到了它的支持数组声明:

private transient Object[] elementData;

为什么这需要是瞬态的?为什么不能对此类进行序列化?

谢谢您的帮助!


问题答案:

可以 被序列化;
ArrayList班只是需要照顾的事情本身,而不是使用默认的机制。查看该类中的writeObject()readObject()方法,它们是标准序列化机制的一部分。

如果您查看源代码,则会看到它writeObject()不保存后备阵列。相反,它一次将元素(包括空值)序列化到最大size()限制。这避免了序列化阵列的开销,尤其是避免了阵列末尾的任何未使用的插槽。反序列化时,由会创建一个最小所需大小的新支持数组readObject()



 类似资料:
  • 问题内容: 为什么Java有瞬态字段? 问题答案: 在中关键字用于指示字段不应该是系列化的一部分(这意味着保存,像一个文件)的过程。 从Java语言规范,Java SE 7中版,第8.3.1.3节。transient领域: 可以标记变量transient以指示它们不是对象持久状态的一部分。 例如,你可能具有从其他字段派生的字段,并且仅应以编程方式进行操作,而不要通过序列化来保持状态。 这是一个包含

  • 问题内容: 在Java 实现中基于对象数组。 谁能解释我为什么使用数组而不是数据存储的实现?使用有什么好处? 问题答案: 在Java中,创建通用类型的数组并不容易。 简单的方法不能编译: 替换为,一切都很好(以容器实现中其他地方增加的复杂性为代价)。 有其他方法,但是它们呈现了一组不同的权衡。有关广泛的讨论,请参见如何在Java中创建通用数组?

  • 我正在使用Jackson 2.1.4将POJO序列化为JSON,但我想忽略序列化的特定字段。我使用了瞬态,但它仍然在序列化该元素。 我正在序列化如下: 请不要建议,因为我不想将我的模型与杰克逊特定的注释联系起来。是否可以仅使用瞬态完成?对象映射器上是否有任何用于可见性设置的 API?

  • 问题内容: 我有以下代码,其中有一个父类及其子代。我试图确定代码如何从使用多态中受益。 当两者和我给出相同答案时,多态性有什么优势? 问题答案: 让我们首先看一下OO设计,继承表示IS- A关系,通常我们可以说“让我们飞起来”。可以说,每个特定的(子类)IS-A (父类)都适合这种“ 放飞”,而我们希望这种飞行实际上是特定的(子类)的飞行功能,那就是多态性接管了。 因此我们以抽象的方式,面向接口和

  • 我目前正在做一个项目,我遇到了这个错误: 发生了什么:1。)我在登录后设置了一个会话范围变量,比如SessionScopeVariableA。 2.)然后我有一个页面,我在其中添加一个实体,比如EntityA。 3.)EntityA有一个惰性字段sessionScopeVariableA,所以当我调用add方法时,我必须设置这个变量。 4.)请注意,SessionScopeVariableA被包装

  • 问题内容: 瞬态关键字将用于防止特定变量的序列化。但是为什么我们不应该序列化数据呢?有内部安全感吗? 问题答案: 有些类本质上是不可序列化的,因为它们表示Manage Java环境之外的资源。例如,a 不能真正序列化,因为它表示一个打开的文件句柄。对于a同样如此:您无法保存和恢复“打开的套接字”。 如果要序列化具有该类型字段的对象,则必须将这些字段标记为瞬态。 使用的另一个原因是您的类进行某种内部