记得以前写过,这两天又遇到了,不过我记得了,写给容易忽视的人。
在切割list存储的时候,需要将结果存到tair中,很自然的想法是:originalList.subList(from, to),然后直接put到tair。以前我就这么干过,后来报了序列化异常。原因也很简单,即sublist这个List的视图,不支持序列化。
在jdk6中,List<E> subList(int fromIndex, int toIndex)返回的是没有实现Serializable接口的java.util.RandomAccessSubList。
在其父类或者接口中都找不到Serializable这个标志。
- 一种可行解决方案:
List<XXX> serializedList= new ArrayList<XXX>();
serializedList.addAll(sublist);
然后将这个list存储到tair中。
- 一点补充:jdk7中跟jdk6中的对于sublist的处理略有不同。
Jdk7中的sublist实现,它是在ArrayList中直接搞了一个私有内部类:
private class SubList extends AbstractList<E> implements RandomAccess
而jdk6中class RandomAccessSubList<E> extends SubList<E> implements
RandomAccess,注意这里的SubList跟上面的是不同的,这里的SubList是AbstractList的内部类。
分享到:
相关推荐
Java作为一种广泛使用的编程语言,提供了丰富的库和工具来实现时间序列算法。本篇文章将深入探讨时间序列预测的基本原理,Java实现的关键步骤,以及如何通过实际的代码示例进行实践。 时间序列数据是按特定时间顺序...
10. serialVersionUID字段的修改问题:阿里巴巴禁止开发人员修改serialVersionUID字段的值,因为这个字段用于序列化版本控制,如果随意更改会导致序列化与反序列化时出现问题。正确的做法是在类的序列化形式变更时才...
- **序列化一致性**:`serialVersionUID`用于保证序列化的对象版本一致性,随意修改可能导致反序列化失败。 - **稳定性要求**:除非有充分的理由,否则不应修改`serialVersionUID`的值,以保证序列化对象的稳定性。 ...
随意修改它可能会导致序列化兼容性问题,使得反序列化无法正确进行。 11. 谨慎使用继承:继承是面向对象编程中的一个强大特性,但也可能导致代码的紧耦合和难以维护。过度使用继承可能会造成子类与父类的强依赖关系...
但是,如果我们修改serialVersionUID字段的值,可能会出现问题,例如序列化和反序列化问题。因此,Java开发手册建议我们不要修改serialVersionUID字段的值,而是使用默认的serialVersionUID值。 13.为什么建议...
以上只是《阿里巴巴Java代码规范》中的一部分要点,完整规范还包括更多的细节,如类型转换、资源关闭、枚举使用、序列化等。遵循这些规范,可以帮助开发者编写出更加专业、高效且易于维护的Java代码。
修改`serialVersionUID`字段的值会影响序列化兼容性,可能导致反序列化失败。除非有特殊需求,否则应保持其不变。 避免使用`double`直接构造`BigDecimal`,因为`double`在二进制表示下可能存在精度损失。应该使用...
serialVersionUID是序列化版本标识,用于序列化兼容性检查。随意修改可能导致反序列化失败。只有在类结构发生变化时,才需要更新此值。 11. **谨慎使用继承**: 阿里巴巴建议开发者谨慎使用继承,因为过度的继承...
以上仅是《阿里巴巴Java开发手册1.4.0》中部分重要知识点的概述,实际上手册还涵盖了更多的细节和最佳实践,包括类型安全、序列化、多线程、数据库操作等多个方面,对于提升Java开发者的专业技能和团队协作效率具有...
- **禁止修改serialVersionUID的值**:序列化ID应由编译器自动生成,手动修改可能导致反序列化失败。 - **谨慎使用继承**:过度使用继承可能导致设计复杂,不易维护,推荐使用组合/聚合代替继承。 - **禁止使用...
当遇到子列表时,迭代器应该将子列表中的所有元素连续地添加到结果序列中,而不是将其作为一个整体元素。也就是说,对于给定的输入`[[1,1],2,[1,1]]`,迭代器的预期输出应该是`[1,1,2,1,1]`。 解决方案: 解决这个...
以上仅是《阿里巴巴Java开发手册-泰山版》中部分核心知识点的概述,实际手册中还涵盖了异常分类、枚举使用、序列化、反射、多线程安全、性能优化等多个方面,全面指导Java开发者遵循最佳实践,提升代码质量和项目...
修改serialVersionUID字段的值可能导致序列化兼容性问题,尤其是在升级版本时。如果不打算改变类的序列化结构,不应修改该字段。 谨慎使用继承是因为过度依赖继承可能导致设计复杂、难以维护的代码。通常,接口和...
如果 List 中包含不可序列化的对象,或者对象的序列化版本不一致,可能会导致序列化失败。确保所有对象都实现了 `Serializable` 接口,并保持序列化版本 ID(`serialVersionUID`)的一致性。 总结 理解 List 的这些...
serialVersionUID是Java序列化机制中用于标识类版本的字段。如果开发人员随意修改serialVersionUID的值,会使得当前类与之前序列化的类实例不再兼容,从而在反序列化时抛出InvalidClassException异常。通常,除非...
这段代码首先初始化斐波那契数列的前两项,然后在一个循环中不断将最后两项相加并添加到序列中,直到达到900项。最后返回这900项。 在Java中,我们可以使用动态规划的思想,避免重复计算: ```java public static ...
ArrayList还继承于Serializable,实现了克隆和序列化功能。 ArrayList的构造函数 ArrayList有多种构造函数,包括: * 默认构造函数ArrayList():创建一个默认容量的ArrayList。 * ArrayList(int capacity):创建...