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