本文会对ArrayList
和Vector
进行分析,为什么会关注这两个类,主要是因为他们拥有相同的继承结构,接下来就来探索下这两个类实现和效率的异同。
继承结构
![](https://i-blog.csdnimg.cn/blog_migrate/46e001380c0f283177790fff99314a14.png)
可以看到,Vector
和ArrayList
都实现了List
和RandomAccess
接口,都继承了AbstractList
。通过他们的继承结构,大致可以猜测他们在元素的处理上存在很多相同的地方。
存储结构
Vector
和ArrayList
都使用 Object [] elementData
保存数据,但是不同的ArrayList
的elementData
使用transient
做了标记,这说明ArrayList
的elementData
不参与对象序列化的过程。
添加元素
- Vector
add(E)``add(int, E)``addElement(E obj)``addAll(Collection<? extends E> c)``addAll(int, Collection<? extends E> c)``insertElementAt(E obj, int )
- ArrayList
add(E)``add(int, E)``addAll(Collection<? extends E> c)``addAll(int, Collection<? extends E> c)
在元素的添加上,Vector
和ArrayList
差不多提供了相同的接口,但是最大的不同是Vector
提供的接口中,除了add(int, E)
之外,都是同步接口,但是add(int, E)
最终会调用同步方法insertElementAt(E obj, int )
,故Vector
添加元素都是同步方法;ArrayList
添加元素的方法都是非同步方法。
访问
- Vector
get(int index)``elementAt(int index)
*