java ArrayList和Vector的区别详解

 更新时间:2016年11月01日 16:24:43   作者:志哥  
这篇文章主要介绍了java ArrayList和Vector的区别详解的相关资料,并附简单实例代码,需要的朋友可以参考下

 ArrayList和Vector的区别

相同点:

1、ArrayList和Vector都是继承了相同的父类和实现了相同的接口

2、底层都是数组实现的

3、初始默认长度都为10。

不同点:

1、同步性:

Vector中的public方法多数添加了synchronized关键字,以确保方法同步,也即是Vector线程安全,ArrayList线程不安全。

2、扩容不同

内部属性不同,这可能是导致扩容方式不同的原因所在。

ArrayList有两个属性,存储数据的数组elementData,和存储记录数目的size。

Vector有三个属性,存储数据的数组elementData,存储记录数目的elementCount,还有扩展数组大小的扩展因子capacityIncrement。

ArrayList的扩展方法

//jdk1.8.0_91
private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + (oldCapacity >> 1);
    if (newCapacity - minCapacity < 0)
      newCapacity = minCapacity;
    if (newCapacity - MAX_ARRAY_SIZE > 0)
      newCapacity = hugeCapacity(minCapacity);
    // minCapacity is usually close to size, so this is a win:
    elementData = Arrays.copyOf(elementData, newCapacity);
  }

可以看出,在满足扩容条件时,扩展后数组大小为原数组长度的1.5倍与传递参数中较大者

Vector的扩展方法

//jdk1.8.0_91
private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
                     capacityIncrement : oldCapacity);
    if (newCapacity - minCapacity < 0)
      newCapacity = minCapacity;
    if (newCapacity - MAX_ARRAY_SIZE > 0)
      newCapacity = hugeCapacity(minCapacity);
    elementData = Arrays.copyOf(elementData, newCapacity);
  }

可以看出,当扩容因子大于0时,新数组长度为原数组长度+扩容因子,否则子新数组长度为原数组长度的2倍。 将上面生成的新数组长度与传递的参数长度作比较,较大者为最终的新长度。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Java中Map的entrySet()使用说明

    Java中Map的entrySet()使用说明

    这篇文章主要介绍了Java中Map的entrySet()使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • java实现远程连接执行命令行与上传下载文件

    java实现远程连接执行命令行与上传下载文件

    这篇文章主要介绍了java实现远程连接执行命令行与上传下载文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java RSA加密解密实现方法分析【附BASE64 jar包下载】

    Java RSA加密解密实现方法分析【附BASE64 jar包下载】

    这篇文章主要介绍了Java RSA加密解密实现方法,结合实例形式分析了java基于第三方类库javabase64-1.3.1.jar实现RSA加密解密功能的具体步骤与相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • Java 关键字transient与注解@Transient的区别用途解析

    Java 关键字transient与注解@Transient的区别用途解析

    在Java中,transient 是一个关键字,用于声明一个字段不会被序列化,这篇文章给大家介绍了Java 关键字transient与注解@Transient的区别,感兴趣的朋友一起看看吧
    2025-05-05
  • java webservice超时时间设置方法代码

    java webservice超时时间设置方法代码

    当我们使用WebService进行调用时,有时会出现超时的情况,下面这篇文章主要给大家介绍了关于java webservice超时时间设置方法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • java中List移除元素的四种方式

    java中List移除元素的四种方式

    本文主要介绍了java中List移除元素的四种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • SpringBoot高级配置之临时属性、配置文件、日志、多环境配置详解

    SpringBoot高级配置之临时属性、配置文件、日志、多环境配置详解

    这篇文章主要介绍了SpringBoot高级配置之临时属性、配置文件、日志、多环境配置,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • 基于SpringBoot和Vue实现头像上传与回显功能

    基于SpringBoot和Vue实现头像上传与回显功能

    在现代Web应用中,用户个性化体验尤为重要,其中头像上传与回显是一个常见的功能需求,本文将详细介绍如何使用Spring Boot和Vue.js构建一个前后端协同工作的头像上传系统,并实现图片的即时回显,需要的朋友可以参考下
    2024-08-08
  • 详解Spring Cloud Gateway 数据库存储路由信息的扩展方案

    详解Spring Cloud Gateway 数据库存储路由信息的扩展方案

    这篇文章主要介绍了详解Spring Cloud Gateway 数据库存储路由信息的扩展方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Spring、SpringMvc和SpringBoot的区别及说明

    Spring、SpringMvc和SpringBoot的区别及说明

    Spring框架提供了全面的Java开发解决方案,核心包括IOC和AOP,SpringMvc作为其中的WEB层开发框架,通过复杂的XML配置管理前端视图和后台逻辑,SpringBoot则简化了配置,专注于微服务接口开发,支持嵌入式服务器,提高了开发效率
    2024-10-10

最新评论