• Java中Vector和ArrayList的区别


         广州疯狂软件学院拥有三大课程体系包括:java课程,android课程,ios课程,疯狂软件年终钜惠,报名java就业班,免费赠送基础班,名额有限,本月火热报名中,欢迎有志之士电话或者QQ咨询。

      首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList、Vector和LinkedList.List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。3个具体实现类的相关区别如下:

      ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。

      Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。

      LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。

      查看Java源代码,发现当数组的大小不够的时候,需要重新建立数组,然后将元素拷贝到新的数组内,ArrayList和Vector的扩展数组的大小不同。

      ArrayList中:

      1 public boolean add(E e) {

      2

      3 ensureCapacity(size + 1); // 增加元素,判断是否能够容纳。不能的话就要新建数组

      4

      5 elementData[size++] = e;

      6

      7 return true;

      8

      9 }

      10

      11 public void ensureCapacity(int minCapacity) {

      12

      13 modCount++;

      14

      15 int oldCapacity = elementData.length;

      16

      17 if (minCapacity > oldCapacity) {

      18

      19 Object oldData[] = elementData; // 此行没看出来用处,不知道开发者出于什么考虑

      20

      21 int newCapacity = (oldCapacity * 3)/2 + 1; // 增加新的数组的大小

      22

      23 if (newCapacity < minCapacity)

      24

      25 newCapacity = minCapacity;

      26

      27 // minCapacity is usually close to size, so this is a win:

      28

      29 elementData = Arrays.copyOf(elementData, newCapacity);

      30

      31 }

      32

      33 }

      疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。技术知识沉淀深厚的老师,让你感受Java的魅力,激发你对于编程的热爱,让你在半年的时间内掌握8-10万的代码量,掌握Java核心技术,成为真正的技术高手;通过大量全真企业项目疯狂训练,迅速积累项目经验。让你成为技能型的现代化高端人才,迅速获得高薪就业!时间不等人,赶紧联系我们吧!疯狂java培训中心地址:广州天河区车陂沣宏大厦3楼。

      疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。疯狂软件开设了java课程,ios课程,android课程,为你提供一个学习java技能的好机会,疯狂软件特大优惠活动,加疯狂软件微信号(疯狂软件),抢优惠,优惠100元+赠送iOS教材一本 详情请看疯狂java培训官网。IT从业着仍是社会所需要的高端人才,广州疯狂软件之力于培养企业所需要的中高端IT人才,让你成为备受企业青睐的人才。

  • 相关阅读:
    .net core consul
    numpy
    Cordova各个插件使用介绍系列(七)—$cordovaStatusbar手机状态栏显示
    ionic 的缓存 和局部刷新
    ionic 项目中添加modal的步骤流程
    ionic 项目中创建侧边栏的具体流程分4步简单学会
    Cordova各个插件使用介绍系列(八)—$cordovaCamera筛选手机图库图片并显示
    python-16: time 模块 之一
    python-16:模块 包
    c-3:位运算:位运算基本用法
  • 原文地址:https://www.cnblogs.com/gojava/p/3503415.html
Copyright © 2020-2023  润新知