类介绍
继承关系
一直想不明白,Vector
继承自AbstractList
,就已经实现了List
接口,为什么还要再类的定义时再实现一次List
接口。
用法及建议
Vector
是一个很好的集合类,在初学java时老师就介绍了这个类。这个类有一些优点:
- 有对象就直接往里放,即便是不同类型也ok,然后取出来时用
instanceof
帮忙判断一下就能正常用 - 一个线性表的实现
经过阅读,Vector
有以下要注意的东西:
- 合理安排
Vector
的扩展量,如果没有设置扩展量会以2的倍数递增 -
Vector
是动态连续空间,增加删除操作不方便 -
Vector
申请的数组空间一般比元素个数多,也提供了操作减去多余空间,甚至减去存有有用数据的空间.
和LinkedList
,ArrayList
对比:
-
内部实现不同:
-
LinkedList
:链表 -
ArrayList
,Vector
:连续数组
-
-
扩展机制不同:
-
LinkedList
:随便扩展 -
ArrayList
: 数组不够用,每次多申请一个,很不友好 -
Vector
: 可以自定义扩展的数组长度
-
-
是否可缩减存储的长度
-
LinkedList
: 不限制 -
ArrayList
:可以删除元素减少看到的元素个数,但是数组长度不会减少 -
Vector
: 可以删元素,可以减少数组长度
-
源码介绍
通用方法不再介绍,有些地方在扩展中进行介绍。
扩展
Enumeration
VSIterator
public interface Enumeration {
/**
* Tests if this enumeration contains more elements.
*
* @return true
if and only if this enumeration object
* contains at least one more element to provide;
* false
otherwise.
*/
boolean hasMoreElements();
/**
* Returns the next element of this enumeration if this enumeration
* object has at least one more element to provide.
*
* @return the next element of this enumeration.
* @exception NoSuchElementException if no more elements exist.
*/
E nextElement();
}
至于Iterator
就不再赘述,前面专门介绍过了。
主要区别:
-
函数接口不同
Enumeration
只有2个函数接口。通过Enumeration
,我们只能读取集合的数据,而不能对数据进行修改。Iterator
只有3个函数接口。Iterator
除了能读取集合的数据之外,也能数据进行删除操作。
-
Iterator支持****
fail-fast
机制,而Enumeration
不支持。-
Enumeration
是JDK 1.0添加的接口。使用到它的函数包括Vector
、Hashtable
等类,这些类都是JDK1.0中加入的,Enumeration
存在的目的就是为它们提供遍历接口。Enumeration
本身并没有支持同步,而在Vector
、Hashtable
实现Enumeration
时,添加了同步。 - 而
Iterator
是JDK 1.2才添加的接口,它也是为了HashMap
、ArrayList
等集合提供遍历接口。Iterator
是支持fail-fast
机制的:当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast
事件。
-
System.arraycopy()
这里介绍这个主要是在看源码的过程中看到了这个:
System.arraycopy(elementData, index, elementData, index + 1, elementCount - index);
System.arraycopy(elementData, index, elementData, index - 1, elementCount - index);
一个是后移,一个是前移。都能实现,最开始我们只注意了第二种情况,认为是从前往后依次拷贝,可以实现。但是第一种情况就无法解释了。
经过查询,System.arraycopy()
实现思路是:从sourceArray
拷贝到tempArray
,拷贝完再从tempArray
拷贝到targetArray
。【了解意思即可,变量名可能不是这几个名】
参考文献
https://www.cnblogs.com/skywang12345/p/3311275.html
https://juejin.im/post/5aa32725f265da2373140df3