java ArrayList和Vector的区别详解

作者:志哥 时间:2023-03-08 14:47:05 

 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倍。 将上面生成的新数组长度与传递的参数长度作比较,较大者为最终的新长度。

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

标签:ArrayList,Vector,区别
0
投稿

猜你喜欢

  • 实战android打包和签名

    2023-11-18 10:23:50
  • Java中Equals使用方法汇总

    2022-09-14 23:08:28
  • Java数据结构专题解析之栈和队列的实现

    2022-11-20 01:24:21
  • java 如何读取properties文件

    2023-08-28 05:23:01
  • 微信公众号服务号推送模板消息设置方法(后端java)

    2023-11-20 08:27:58
  • Android ListView仿微信聊天界面

    2023-10-15 04:59:46
  • 解决spring security中遇到的问题

    2023-05-08 11:26:46
  • 基于C#对用户密码使用MD5加密与解密

    2022-11-24 23:05:23
  • 浅谈mybatis中SQL语句给boolean类型赋值问题

    2023-01-19 15:15:42
  • Android 应用启动欢迎界面广告的实现实例

    2023-01-26 07:34:11
  • Java中static变量作用和用法详解

    2021-11-09 12:01:04
  • Unity屏幕雪花另类实现方式示例

    2022-06-18 23:32:43
  • java实现简单石头剪刀布小游戏

    2021-09-17 07:25:41
  • IDEA中使用Typora编辑md文件的方法

    2022-11-28 09:50:47
  • Spring Cloud Gateway集成Sentinel流控详情

    2023-11-09 20:27:31
  • C# Dynamic关键字之:dynamic为什么比反射快的详解

    2021-06-24 04:22:35
  • Java实现宠物商店管理

    2023-09-14 09:14:13
  • SpringBoot Nacos实现自动刷新

    2023-09-16 04:17:09
  • 分析ABA问题的本质及其解决办法

    2021-12-20 13:59:26
  • Android EditText限制输入字符的方法总结

    2023-04-22 03:16:24
  • asp之家 软件编程 m.aspxhome.com