栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Part5

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Part5

目录
  • Vector的基本介绍
  • 源码剖析
    • 使用无参构造器创建Vector对象,跟踪源码
    • 使用有参构造器创建Vector对象,跟踪源码【待写】
  • Vector底层结构和ArrayList的比较

Vector的基本介绍
  1. Vector类的定义说明

  2. Vector底层也是一个对象数组,

    protected Object[] elementData;
    
  3. Vector是线程同步的,即线程安全,Vector类的操作方法带有synchronized

    public synchronized E get(int index) {
        if (index >= elementCount)
            throw new ArrayIndexOutOfBoundsException(index);
    
        return elementData(index);
    }
    
源码剖析 使用无参构造器创建Vector对象,跟踪源码
public class Vector_ {
    public static void main(String[] args) {
        Vector vector = new Vector();
        for (int i = 0; i < 10; i++) {
            vector.add(i);
        }
        vector.add(100);
        vector.add(200);
    }
}

装箱操作

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

执行vector.add

(1)modCount++:记录集合被修改的次数

(2)先确定是否需要扩容

(3)然后再执行赋值

public synchronized boolean add(E e) {
    modCount++;
    ensureCapacityHelper(elementCount + 1);
    elementData[elementCount++] = e;
    return true;
}

如果elementData的大小不够,就调用grow()去扩容

private void ensureCapacityHelper(int minCapacity) {
    // overflow-conscious code
    if (minCapacity - elementData.length > 0)
        grow(minCapacity);
}

真正的扩容

(1)使用扩容机制来确定要扩容到多大

(2)capacityIncrement=0,第一次oldCapacity=10,newCapacity=oldCapacity*2=20,即相当于按照2倍扩容

(3)扩容使用的是Arrays.copyOf()

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);
}
使用有参构造器创建Vector对象,跟踪源码【待写】 Vector底层结构和ArrayList的比较
底层结构版本线程 安全(同步)效率扩容倍数
ArrayList可变数组jdk1.2不安全,效率高如果 有参构造1.5倍
如果是无参
1. 第一次10
2. 第二次开始按1.5扩
Vector可变数组 Object[]jdk1.0安全,效率低如果指定大小,则每次直接按2倍扩
如果是无参构造,默认10,满了 之后,按2倍扩容
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/826975.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号