ArrayList和Vector区别以及其扩容机制
来源:互联网 发布:淘宝被扣48分怎么解封 编辑:程序博客网 时间:2024/05/21 07:50
ArrayList和Vector区别以及其扩容机制
相同点:
1、ArrayList和Vector都是继承了相同的父类和实现了相同的接口
(extends AbstractList implements List, Cloneable, Serializable, RandomAccess)
2、底层都是数组(Object[])实现的
3、初始默认长度都为10。
不同点:
1、同步性(Synchronization):
Vector中的public方法多数添加了synchronized关键字、以确保方法同步、也即是Vector线程安全、ArrayList线程不安全。
2、扩容(Resize):
ArrayList以1.5倍的方式在扩容、Vector 当扩容容量增量大于0时、新数组长度为原数组长度+扩容容量增量、否则新数组长度为原数组长度的2倍。
3、性能(Performance):
由于第一点的原因、在性能方便通常情况下ArrayList的性能更好、而Vector存在synchronized 的锁等待情况、需要等待释放锁这个过程、所以性能相对较差。
4、快速失败(fail-fast):
什么是fail-fast:参见另一边博文: // TODO
Vector 的 elements 方法返回的 Enumeration 不是 快速失败(fail-fast)的。而ArrayList是快速失败(fail-fast)
其底层的扩容方法grow()
ArrayList的扩容方法:
Vector的扩容方法:
相同点:
1、ArrayList和Vector都是继承了相同的父类和实现了相同的接口
(extends AbstractList implements List, Cloneable, Serializable, RandomAccess)
2、底层都是数组(Object[])实现的
3、初始默认长度都为10。
不同点:
1、同步性(Synchronization):
Vector中的public方法多数添加了synchronized关键字、以确保方法同步、也即是Vector线程安全、ArrayList线程不安全。
2、扩容(Resize):
ArrayList以1.5倍的方式在扩容、Vector 当扩容容量增量大于0时、新数组长度为原数组长度+扩容容量增量、否则新数组长度为原数组长度的2倍。
3、性能(Performance):
由于第一点的原因、在性能方便通常情况下ArrayList的性能更好、而Vector存在synchronized 的锁等待情况、需要等待释放锁这个过程、所以性能相对较差。
4、快速失败(fail-fast):
什么是fail-fast:参见另一边博文: // TODO
Vector 的 elements 方法返回的 Enumeration 不是 快速失败(fail-fast)的。而ArrayList是快速失败(fail-fast)
其底层的扩容方法grow()
ArrayList的扩容方法:
// jdk1.7.0_79private 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);}在满足扩容条件时、ArrayList以1.5倍的方式在扩容(oldCapacity >> 1 结果为二分之一的oldCapacity)。
Vector的扩容方法:
// jdk1.7.0_79private 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);}Vector当扩容容量增量大于0时、新数组长度为原数组长度+扩容容量增量、否则新数组长度为原数组长度的2倍。之后讲新数组长度:newCapacity与所需的最小容量:minCapacity进行比较、较大者作为最终的新长度。
0 0
- ArrayList和Vector区别以及其扩容机制
- ArrayList和Vector的扩容机制
- ArrayList和Vector的扩容机制
- ArrayList和Vector的扩容机制
- ArrayList和Vector的扩容机制
- ArrayList 和Vector区别
- Vector和ArrayList区别
- 区别:Vector和ArrayList
- Vector和ArrayList区别
- Arraylist和Vector区别
- ArrayList和Vector区别
- ArrayList和Vector以及HashTable和HashMap区别
- Java中Vector和ArrayList以及LinkedList的区别
- ArrayList和Vector以及synchronizedList
- ArrayList和Vector以及LinkedList
- ArrayList和Vector以及synchronizedList
- ArrayList和Vector以及synchronizedList
- ArrayList的扩容机制
- 接口多继承
- 安卓中使用Fiddler真机抓包
- Java面试题中的关于单例模式、冒泡排序、递归
- CI与VI
- Android编程权威指南(第二版)学习笔记(十四)—— 第14章 SQLite 数据库
- ArrayList和Vector区别以及其扩容机制
- Linux中bash下三种引号的作用(双引号,单引号,反引号)
- 弹窗插件layer
- Android 系列 4.8设备重启后启动业务
- Uncaught TypeError: Cannot read property 'value' of null
- sonarqube官方文档翻译之AdministrationGuide(一)
- Eclipse部分设置
- java中this与supper
- springboot与mybatis整合实例详解(完美融合)