Java容器五:Vector
来源:互联网 发布:去人声软件 编辑:程序博客网 时间:2024/05/22 17:03
Vector
List, RandomAccess, Cloneable, Serializable
–>AbstractList –>AbstractCollection
Vector和ArrayList的实现类似,只是将所有方法都加上了synchronized保证了线程安全。同样,Vector也是fail-fast的。
成员变量
底层同样通过数组实现。增加和删除操作都通过Arrays.copyOf方法实现。
// 底层数组protected Object[] elementData;// 储存的数据数量protected int elementCount;// 每次增加的数组大小protected int capacityIncrement;
初始化及扩容
初始化
初始化参数写死在了构造函数中,并且数组初始化开辟内存空间是在构造函数中进行的。默认初始化数组大小为10。
public Vector() { this(10);}public Vector(int initialCapacity) { this(initialCapacity, 0);}public Vector(int initialCapacity, int capacityIncrement) { super(); if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); this.elementData = new Object[initialCapacity]; this.capacityIncrement = capacityIncrement;}
扩容
若有初始化扩容值,则将现有数组大小加上扩容值成为新的数组大小,若没有初始化扩容值,则将数组空间扩大两倍。
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;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);}private static int hugeCapacity(int minCapacity) { if (minCapacity < 0) // overflow throw new OutOfMemoryError(); return (minCapacity > MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE;}
最大数组长度的选取
可以看到,在ArrayList,Vector或HashMap等底层通过数组实现的容器其最大数组长度设置的值均为MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8
,Java中数组需要一部分空间储存数组自己本身的信息(数组大小,存储的数据类型),因此不能将index直接赋为Integer.MAX_VALUE,而是需要部分index来定位本身的信息,这一部分的大小是由特定的JVM虚拟机决定的。
What is in java object header
因此将最大长度设置为Integer.MAX_VALUE - 8
,且在超过最大长度后尝试使用Integer.MAX_VALUE
分配空间,若JVM不支持该带大小,将会抛出异常。
0 0
- Java容器五:Vector
- java容器类---Vector
- JAVA集合容器--Vector
- Java用vector容器排序
- JAVA自学笔记(五) 容器
- java容器之五_HashMap
- Java容器之ArrayList、LinkedList和Vector
- 关于java的vector容器和apache的vector
- vector 容器
- Vector容器
- vector容器
- Vector 容器
- vector容器
- vector容器
- 容器vector
- vector 容器
- vector 容器
- vector容器
- Sql中Insert添加语句如何不重复
- Cf Edu 15 C 城市与信号塔[二分]
- 洛谷 P2530 [SHOI2001]化工厂装箱员
- leetcode #4: Median of Two Sorted Arrays
- Struts2学习之旅(2)
- Java容器五:Vector
- iOS简单使用description方法(参考大神博客+自己想法)
- C++之引用
- 淘宝API示例
- [基础算法]递归二分算法
- EditText焦点问题 Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法
- 整数的各位数之和与指数的递归求法
- 51. magento 手动创建订单
- Unity Shaders and Effects Cookbook (D-1) 设置 ZTest 来实现遮挡半透效果