Vector和Stack源码分析
更新日期:
[TOC]
Vector和Stack源码分析
1. Vector与ArrayList
作为底层都是采用动态数组作为实现基础的类,Vector和ArrayList在很多方面都是大同小异的。在阅读之前本文之前可以先阅读ArrayList的源码解析,然后Vector基本就一目了然了。
说下他们的主要区别:
1. Vector里面的方法都是同步的,线程安全的。
2. Vector的扩容大小与ArrayList不同,Vector1.6和1.7中都是上一次大小的2倍。
3. Vector多了许多包含Element的方法 (Vector的子类栈Stack实际采用的是这些方法)
其次Vector比ArrayList还多了一个成员变量 capacityIncrement
, 可以通过构造方法指定
1 | // 自定义的扩容增长大小, 可以通过构造方法指定大小 |
然后如果不指定数据数组的大小,那么就和ArrayList一样,Vector的默认大小也是10。其余与ArrayList名称相同的方法,实现上没什么大的区别。
2. Vector在java1.6和1.7
Vector在1.6和1.7基本没多少大的区别,首先在初始化上也基本相同。没有像ArrayList从1.6升到1.7,在调用构造方法的时候还有一点小的改动。
其次和ArrayList一样,Vector1.7将iterator()和listIterator()方法以及对应的内部类都有了自己的实现,不在采用父类中的方法。
3. 含Element的方法
3.1 elements()
1 | public Enumeration<E> elements() {...} |
这个方法返回 Enumeration 接口的实现,与 iterator() 返回的 Iterator 接口实现基本一样,Enumeration 接口貌似由于方法名称太长、功能与Iterator 接口重复原因,后来建议使用Iterator 接口。。。
3.2 firstElement()和lastElement()
1 | public synchronized E firstElement() {...} |
顾名思义,返回第一个元素和最后一个元素,如果元素不存,则抛出 NoSuchElementException 异常
3.3 crud操作
1 | // 获取指定索引的元素 |
闻其名而知其意,内部实现与传统的add,get,remove的实现基本一样。
4. Stack
栈
是数据结构中一种很重要的数据结构类型。java提供了其实现Stack类
。
首先,Stack在java1.6和1.7源码一模一样。。
Stack是Vector的子类,大部分的方法都继承于Vector,且自己类中的方法也是同步的。
Stack中主要方法如下:
4.1 push
往栈中插入一个元素
1 | public E push(E item) { |
4.2 pop
从栈中弹出一个元素(删除返回),实际从Vector中数组末尾删除并返回
1 | public synchronized E pop() { |
4.3 peek
获取栈顶的元素,但不删除。
1 | public synchronized E peek() { |
4.4 empty
判断栈是否为空,感觉还不如用isEmpty()
1 | public boolean empty() { |
4.5 search
1 | public synchronized int search(Object o) { |
综上:stack中的方法也是特别的简单,无非也就是取了个有意义的方法名称而已,具体实现还是沿用了Vector中的方法。

- hive处理增量数据 | Ice の Mimosa
- hive解决元数据乱码 | Ice の Mimosa
- 【Lombok原理3】实现一个简单的lombok | Ice の Mimosa
- JVM学习05-字节码执行过程和JVM指令集 | Ice の Mimosa
- 【转】Https前世今生 | Ice の Mimosa
- Ice の Mimosa
- 【Lombok原理1】自定义注解处理器 | Ice の Mimosa