2017-07-29 12:59:14

一、简介

1、Vector继承关系

2、Vector类扩容

Vector类的实现和ArrayList极其相似,都使用数组存储元素,但是扩容策略不一样,ArrayList基本是按照1.5倍的思路扩容,Vector是按照创建Vector对象时设置的capacityIncrement值递增的,如果该值没有设置或者为0,则直接Double,如下:

3、Vector的线程安全性

Vector号称是线程安全的,它的安全性来自于几乎给每个方法都添加了synchronized关键字,由于锁对象是当前对象,只要有一个线程在执行某一个加锁的方法,也就是获得到当前对象这个锁对象,其他线程基本都不能再使用这个Vector对象了...这是一种很残暴的设计,估计这可能是synchronized刚出来之时,JDK团队的一时兴奋之作吧~

举几个例子:

即便是有一些方法没有直接加synchronized关键字,至少它所调用的方法都是加了的。

4、Stack

Stack继承自Vector,提供了pop、push、peek、search等栈的特殊操作,源码如下:

 package java.util;

 /**
* The <code>Stack</code> class represents a last-in-first-out
* (LIFO) stack of objects. It extends class <tt>Vector</tt> with five
* operations that allow a vector to be treated as a stack. The usual
* <tt>push</tt> and <tt>pop</tt> operations are provided, as well as a
* method to <tt>peek</tt> at the top item on the stack, a method to test
* for whether the stack is <tt>empty</tt>, and a method to <tt>search</tt>
* the stack for an item and discover how far it is from the top.
* <p>
* When a stack is first created, it contains no items.
*
* <p>A more complete and consistent set of LIFO stack operations is
* provided by the {@link Deque} interface and its implementations, which
* should be used in preference to this class. For example:
* <pre> {@code
* Deque<Integer> stack = new ArrayDeque<Integer>();}</pre>
*
* @author Jonathan Payne
* @since JDK1.0
*/
public
class Stack<E> extends Vector<E> {
/**
* Creates an empty Stack.
*/
public Stack() {
} /**
* Pushes an item onto the top of this stack. This has exactly
* the same effect as:
* <blockquote><pre>
* addElement(item)</pre></blockquote>
*
* @param item the item to be pushed onto this stack.
* @return the <code>item</code> argument.
* @see java.util.Vector#addElement
*/
public E push(E item) {
addElement(item); return item;
} /**
* Removes the object at the top of this stack and returns that
* object as the value of this function.
*
* @return The object at the top of this stack (the last item
* of the <tt>Vector</tt> object).
* @throws EmptyStackException if this stack is empty.
*/
public synchronized E pop() {
E obj;
int len = size(); obj = peek();
removeElementAt(len - 1); return obj;
} /**
* Looks at the object at the top of this stack without removing it
* from the stack.
*
* @return the object at the top of this stack (the last item
* of the <tt>Vector</tt> object).
* @throws EmptyStackException if this stack is empty.
*/
public synchronized E peek() {
int len = size(); if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
} /**
* Tests if this stack is empty.
*
* @return <code>true</code> if and only if this stack contains
* no items; <code>false</code> otherwise.
*/
public boolean empty() {
return size() == 0;
} /**
* Returns the 1-based position where an object is on this stack.
* If the object <tt>o</tt> occurs as an item in this stack, this
* method returns the distance from the top of the stack of the
* occurrence nearest the top of the stack; the topmost item on the
* stack is considered to be at distance <tt>1</tt>. The <tt>equals</tt>
* method is used to compare <tt>o</tt> to the
* items in this stack.
*
* @param o the desired object.
* @return the 1-based position from the top of the stack where
* the object is located; the return value <code>-1</code>
* indicates that the object is not on the stack.
*/
public synchronized int search(Object o) {
int i = lastIndexOf(o); if (i >= 0) {
return size() - i;
}
return -1;
} /** use serialVersionUID from JDK 1.0.2 for interoperability */
private static final long serialVersionUID = 1224463164541339165L;
}

5、结尾

Vector和ArrayList的异同:

1、扩容策略不同;

2、线程安全的;

3、提供了一些独特的如removeElement()之类的方法;

4、其他方法的实现与ArrayList几乎是一致的,毕竟都是对数组的操作;

5、忽略这个类即可;

最新文章

  1. 阿里云linux ecs服务器配置apache+php环境
  2. iOS开发小技巧--相机相册的正确打开方式
  3. Maven学习链接
  4. 从零开始,做一个NodeJS博客(二):实现首页-加载文章列表和详情
  5. Windows 常用 CMD 命令行介绍
  6. JavaScript面向对象编程指南
  7. zoj 2836 容斥原理
  8. 【USACO 3.2.3】纺车的轮子
  9. Net线程池设计
  10. FindWindowEx使用方法
  11. 漫谈并发编程(二):java线程的创建与基本控制
  12. C#数据结构之串
  13. Go学习——defer、panic
  14. Android Touch事件传递机制 二:单纯的(伪生命周期) 这个清楚一点
  15. Python【每日一问】02
  16. vue在页面嵌入别的页面或者是视频2
  17. 基于FPGA的I2C读写EEPROM
  18. Java 在给定路径上创建文件,所在文件夹不存在时,如何正确创建。
  19. [转]linux下释放文件内存
  20. MT【157】至少一个小于1

热门文章

  1. ES6 - Note5:Promise
  2. CML相关
  3. Chrome 监听 console 打开
  4. jQuery 源码理解的基础
  5. java获取静态页面内容
  6. 有关JVM内存
  7. csu oj 1339: 最后一滴血
  8. ORACLE的表被 另一个用户锁定,如何解除..
  9. Android四大组件之BroadcastReceiver
  10. SGU Volume 2
  11. 《A First Course in Probability》-chape4-离散型随机变量-方差
  12. CodeFirst中DB保存时报错:对一个或多个实体的验证失败。
  13. 关于DOM的理解
  14. sublime text 3配置使用python
  15. 用线性单元(LinearUnit)实现工资预测的Python3代码
  16. pwnable.tw dubblesort 分析
  17. Android开发 android沉浸式状态栏的适配(包含刘海屏)转载
  18. 关于 Cortex-M3 的双堆栈机制
  19. 16-pymysql模块的使用
  20. HDU 6119 小小粉丝度度熊 (区间去重)【尺取】