Vector和Stack分析
来源:互联网 发布:js中array的indexof 编辑:程序博客网 时间:2024/06/08 21:27
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, 可以通过构造方法指定
// 自定义的扩容增长大小, 可以通过构造方法指定大小protected int capacityIncrement; // 在扩容的时候会使用到// 1.6int newCapacity = (capacityIncrement > 0) ? (oldCapacity + capacityIncrement) : (oldCapacity * 2);// 1.7int newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity);
然后如果不指定数据数组的大小,那么就和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()
public Enumeration<E> elements() {...}
这个方法返回 Enumeration 接口的实现,与 iterator() 返回的 Iterator 接口实现基本一样,Enumeration 接口貌似由于方法名称太长和功能与Iterator 接口重复原因,后来建议使用Iterator 接口。。。
3.2 firstElement()和lastElement()
public synchronized E firstElement() {...}public synchronized E lastElement() {...}
顾名思义,返回第一个元素和最后一个元素,如果元素不存,则抛出 NoSuchElementException 异常
3.3 crud操作
// 获取指定索引的元素public synchronized E elementAt(int index) {}// 设置某个索引的元素public synchronized void setElementAt(E obj, int index) {}// 新增一个元素public synchronized void addElement(E obj) {}// 删除元素public synchronized void removeElementAt(int index) {}public synchronized boolean removeElement(Object obj) {}public synchronized void removeAllElements() {}// 在某个索引前插入某个元素public synchronized void insertElementAt(E obj, int index) {}
闻其名而知其意,内部实现与传统的add,get,remove的实现基本一样。
4. Stack
栈是数据结构中一种很重要的数据结构类型。java提供了其实现Stack。
首先,Stack在java1.6和1.7源码一模一样。。
Stack是Vector的子类,大部分的方法都继承于Vector,且自己类中的方法也是同步的。
Stack中主要方法如下:
4.1 push
往栈中插入一个元素
public E push(E item) { addElement(item); return item;}
4.2 pop
从栈中弹出一个元素(删除返回),实际从Vector中数组末尾删除并返回
public synchronized E pop() { E obj; int len = size(); obj = peek(); removeElementAt(len - 1); return obj;}
4.3 peek
获取栈顶的元素,但不删除。
public synchronized E peek() { int len = size(); if (len == 0) throw new EmptyStackException(); return elementAt(len - 1);}
4.4 empty
判断栈是否为空,感觉还不如用isEmpty()
public boolean empty() { return size() == 0;}
4.5 search
public synchronized int search(Object o) { int i = lastIndexOf(o); if (i >= 0) { return size() - i; } return -1;}
综上:stack中的方法也是特别的简单,无非也就是取了个有意义的方法名称而已,具体实现还是沿用了Vector中的方法。
- Vector和Stack分析
- Vector和Stack分析
- Vector和Stack注意事项
- Vector 和 stack
- Vector和Stack的用法
- list、Vector、迭代器和Stack
- JDK 1.8 Vector与Stack源码分析
- Java 集合系列之 List总结(LinkedList, ArrayLis,vector,stack等使用场景和性能分析)
- 借用template和vector模拟Stack
- 源码分析-java-Vector、Stack-与ArrayList的相关性
- 数据结构之栈(附:Stack/Vector源码分析)
- 【C++】利用list和vector实现stack和queue!!!
- Java中Vector类和Stack类的学习
- C++ STL Adaptor stack、queue和vector的使用
- JAVA进阶4.8——Vector和Stack
- Java集合——Stack和Vector应用实例
- [C++][STL](一)vector和stack的学习
- 我的笔记 Vector 和 Stack 集合类
- 对于PCA人脸识别过程的理解
- Kinect虎头蛇尾 微软如何避免HoloLens重蹈覆辙 别搞Kinect了 转移ARVR把
- [看书日记20151230]属性动画, 插值器,估值器,属性动画的监听
- 博客的客户端
- 【C++ STL应用与实现】19: 迭代器特性-iterator traits
- Vector和Stack分析
- Android获取View的宽高与View.measure详解
- 算法之绪论
- Hibernate中BookClassId作为外键,Book.jsp访问BookClassName
- artDialogV6 关闭弹窗
- Sicily.找零总数
- Python For MySQL 使用连接器连接 ( 一)
- 数据库操作的异常Cannot perform this operation because the connection pool has been close
- Perl 6 网页抓取