阅读 66

重学Java-基础篇-集合类篇二

ArrayList与Vector区别详解

区别一

ArrayList类和Vector类都是使用数组实现的,但是在定义数组elementData这个属性时不同,ArrayList使用transient关键字

private transient Object[] elementData;  (ArrayList)

protected Object[] elementData;  (Vector)
复制代码

transient

Java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。这里的对象存储是指,Java的serialization提供的一种持久化对象实例的机制。当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。使用情况是:当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。,就是被transient修饰的成员变量,在序列化的时候其值会被忽略,在被反序列化后, transient 变量的值被设为初始值, 如 int 型的是 0,对象型的是 null。

区别二

ArrayList实现了writeObject方法,可以看到只保存了非null的数组位置上的数据。即list的size个数的elementData。需要额外注意的一点是,ArrayList的实现,提供了fast-fail机制,可以提供弱一致性。

fast-fail机制: hollischuang.gitee.io/tobetopjava…

Vector也实现了writeObject方法,但方法并没有像ArrayList一样进行优化存储,实现语句是clone()的时候会把null值也拷贝。所以保存相同内容的Vector与ArrayList,Vector的占用的字节比ArrayList要多

区别三

ArrayList是非同步实现的一个单线程下较为高效的数据结构(相比Vector来说)。 ArrayList只通过一个修改记录字段提供弱一致性,主要用在迭代器里。没有同步方法。 即上面提到的Fast-fail机制.ArrayList的存储结构定义为transient,重写writeObject来实现自定义的序列化,优化了存储。、

Vector是多线程环境下更为可靠的数据结构,所有方法都实现了同步。

区别四

Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%

本文章来着对Java工程师成神之路 学习总结

hollischuang.gitee.io/tobetopjava…

文章分类
后端
文章标签