/*
*作者:呆萌老师
*☑csdn认证讲师
*☑51cto高级讲师
*☑腾讯课堂认证讲师
*☑网易云课堂认证讲师
*☑华为开发者学堂认证讲师
*☑爱奇艺千人名师计划成员
*在这里给大家分享技术、知识和生活
*各种干货,记得关注哦!
*vx:it_daimeng
*/
1、什么是集合框架
集合我们又常称集合框架。集合与数组都是对多个数据进行存储操作的结构,也是JAVA当中的容器。JAVA集合就像一种容器,可以动态地把多个对象的引用放入容器中。在开发中我们以数据结构为载体,以对象值的固定为目标,对集合展开研究。
2、集合框架的结构
3、什么是Vector
vector又称向量,是一种古老的存储方式,其底层实现是由不可变动的数组实现。不可变是指存储空间地址不可改且存储空间连续。
又因为vector大量使用了synchronized关键字去修饰操作方法,从而使得其为线程安全的,相对应的操作效率大大降低,又因为其扩容机制是每次扩容2倍,相比较于ArrayList的1.5倍扩容而言,申请的空间又过多,因此,到目前渐渐地被ArrayList替代。
4、vector扩容因子
protected int capacityIncrement;
5、扩容源码
vector扩容每一次是以两倍扩容。
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;
}
6、vector特点
1、查询快
由于vector底层是由一个数组构成,因此其查询相对而言较快。
2、线程安全
7、vector使用
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;
public class ArrayListExample {
public static void main(String[] args)
{
//Vector
Vector<String> vector = new Vector<>(Arrays.asList("A","B","C"));
Enumeration<String> vectorEnums = vector.elements();
while(vectorEnums.hasMoreElements()) {
String value = vectorEnums.nextElement();
if("B".equals(value)) {
vector.add("D");
}
System.out.println(value);
}
}
}