java vector 子类_Java之集合(四)Vector和Stack

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。

除了上面所说的线程安全的不同之外,其它几乎是一样的,方法定义及名称有些许不同,唯一剩下的区别就在于扩容的大小不一样。

eae7575d4f77aa7368a849fdba394d58.png

ArrayList是原来的三倍,Vector不指定就是原来的两倍。其它的也没有什么可说明的了,迭代器也是重写的,也实现了线程安全。

3.Stack

Stack继承子Vector也是线程安全的,其实现也借助了Vector的数据结构和方法。简单的说就是一个push操作:往数组中最后添加元素,pop操作:取出最后一个元素。这样达到先入后出的效果,还有一个peek操作只看不取。

8a635c3c323b73b22a8b46a25996a579.png

cdec176f8fdfabe99df6c353de98b3b3.png

34e47811b7801630a35540c6f7a39709.png

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

4.图

Vector的图就不再给出,此处给Stack的操作图。

404e6cb34863017ed4e9ddf817ccffe4.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值