Java之集合(四)Vector和Stack
转载请注明源出处:http://www.cnblogs.com/lighten/p/7296023.html
1.前言
本章介绍Java集合List中的Vector和其子类Stack。Vector类是Java 1.0就提供的一个集合类,其实现和上章讲解的ArrayList几乎一样,在下面会简单介绍一下(不然就没有可说的了),其子类Stack是一个程序员都比较熟悉的栈结构,特点就是先入后出,Stack其实也较为简单,会简单描述一下。
2.Vector
在前言中也谈到了Vector与ArrayList几乎一样,为什么会有两个重复作用的类呢?原因很简单,Vector和ArrayList最大的不同就是Vector是线程安全的,而ArrayList是线程不安全的。而Vector也说了是Java 1.0就提供了的一个类,而ArrayList是后面Java 1.2版本才提供的类。至于原因想必应该都清楚了,那就是效率。在很多场合下,我们需要的并不是一个线程安全的类,比如单线程或者保证只有一个线程可以访问对象时,线程安全就没有多大意义了,反而会造成程序运行效率低下。所以,是否需要线程安全应该由开发者决定,这是Java早期犯的一个错误,所提供的大部分都是线程安全的类,相似的类有StringBuffer和StringBuilder。
除了上面所说的线程安全的不同之外,其它几乎是一样的,方法定义及名称有些许不同,唯一剩下的区别就在于扩容的大小不一样。

ArrayList是原来的三倍,Vector不指定就是原来的两倍。其它的也没有什么可说明的了,迭代器也是重写的,也实现了线程安全。
3.Stack
Stack继承子Vector也是线程安全的,其实现也借助了Vector的数据结构和方法。简单的说就是一个push操作:往数组中最后添加元素,pop操作:取出最后一个元素。这样达到先入后出的效果,还有一个peek操作只看不取。



看过去push没有同步,实际上调用的父类的addElement操作是进行了同步,这里就不需要同步了。其它的也就一个search操作,使用的是lastIndexOf方法,倒序遍历而已。
4.图
Vector的图就不再给出,此处给Stack的操作图。

Java之集合(四)Vector和Stack的更多相关文章
- Java之集合框架vector类设计原理
- Java集合框架(三)—— List、ArrayList、Vector、Stack
List接口 List集合代表一个有序集合,集合中每一个元素都有其对应的顺序索引.List集合容许使用重复元素,可以通过索引来访问指定位置的集合对象. ArrayList和Vector实现类 Arra ...
- Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
本文非常详尽地介绍了Java中的三个集合类 ArrayList,Vector与Stack <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整 ...
- Java中的集合List、ArrayList、Vector、Stack(三)
List接口 List集合代表一个有序集合,集合中每一个元素都有其对应的顺序索引.List集合容许使用重复元素,可以通过索引来访问指定位置的集合对象. ArrayList和Vector实现类 Arra ...
- Java集合 之List(ArrayList、LinkedList、Vector、Stack)理解(new)
一. ArrayList底层实现原理 对比 和Vector不同,ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOn ...
- Vector和Stack源码分析/List集合的总结
序言 这篇文章算是在这list接口下的集合的最后一篇了,前面ArrayList.LinkedList都已经讲解完了,剩下就Vector和Vector的子类Stack啦.继续努力.一步一个脚印, --W ...
- JAVA中的数据结构——集合类(线性表:Vector、Stack、LinkedList、set接口;键值对:Hashtable、Map接口<HashMap类、TreeMap类>)
Java的集合可以分为两种,第一种是以数组为代表的线性表,基类是Collection:第二种是以Hashtable为代表的键值对. ... 线性表,基类是Collection: 数组类: person ...
- Java 集合系列07之 Stack详细介绍(源码解析)和使用示例
概要 学完Vector了之后,接下来我们开始学习Stack.Stack很简单,它继承于Vector.学习方式还是和之前一样,先对Stack有个整体认识,然后再学习它的源码:最后再通过实例来学会使用它. ...
- java集合之vector容器
学完ArrayList和LinkedList之后,我们接着学习Vector.第1部分 Vector介绍第2部分 Vector数据结构第3部分 Vector源码解析(基于JDK1.6.0_45)第4部分 ...
随机推荐
- modelsim仿真基本流程
好久没再用过modelsim,都忘的一干二净了.刚换了份工作,又要重新拾起来,不过现在感觉modelsim的仿真其实是比较快的,很有用处.再者这么长时间老是学了忘,忘了再学,觉得真浪费时间,平时确实应 ...
- 关于Python Package下的Module import方式[转]
2012年有一个目标我没有达成,那就是深入学习和使用Python语言.这个目标被其他学习任务和工作无情的抢占了,当然最主要的原因还是我重视不够^_^. 近期恰逢有一些Python工程的开发工作要做,就 ...
- _RecordsetPtr使用方法
_variant_t vUsername,vID,vname; //变量声明 _RecordsetPtr m_pRecordset; //记录集 CString strid; _Connect ...
- [笔记]学习EBS建议有的知识
http://f.dataguru.cn/thread-51057-1-1.html ORACLE EBS学习的其他资源有哪四个? ORACLE OPEN WORLD大会是不是一个市场营销活动? Or ...
- 曲演杂坛--HASH的一点理解
HASH,百度百科上做如下定义: Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列 ...
- .Net中XML,JSON的几种处理方式
一.XML: 1.基本了解: xml,Extensible markup language可扩展标记语言,用于数据的传输或保存,特点,格式非常整齐数据清晰明了,并且任何语言都内置了xml分析引擎, 不 ...
- 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架
一.系列简述 本篇起,将通过一系列文章,去描述如何构建一个应用开发框架,并以作者开发的框架为例,逐个点展开分析,如何从零开始,构建自己的开发框架. 本系列文章的目的,是带领有一编程经验的人,通过动手, ...
- div水平垂直居中方法及优缺点
代码: <div class="father"> <div class="son"> </div></div> ...
- Map 综述(三):彻头彻尾理解 ConcurrentHashMap
https://blog.csdn.net/justloveyou_/article/details/72783008
- leetcode 121. 买卖股票的最佳时机 JAVA
题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票 ...