ArrayList 和 Vector 的区别

首先这两个类都实现了 List 接口,而实现 List 接口一共三个类,Vector、ArrayList 和 LikedList。List 用于存放多个元素,能够维护元素的次序,并且允许元素重复,这三个类之间的相同与不同如下:

  1. 底层数据结构区别,ArrayList 和 Vector 底层都通过数组实现,而 LinkedList 则通过链表实现。不同的数据结构决定了他们的特性,利用数组实现的 ArrayList 和 Vector 能够更快的进行查找,而利用链表实现的 LinkedList 则能够更快的进行插入和删除。
  2. ArrayList 不支持线程同步,Vector 通过在每个方法上加 synchronized 实现线程同步。
  3. 如果集合中的元素的数目大于目前集合数组的长度时,vector增长率为目前数组长度的100%,而arraylist增长率为目前数组长度的50%.如过在集合中使用数据量比较大的数据,用vector有一定的优势。但是数组在扩容时需要拷贝内存,会导致性能问题,所以建议再使用数组进行数据存储时,能够有一个比较精准的初始化容量。
    ArrayList 扩容代码:
 private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);//通过加上右移以为之后的本身实现扩容 50%
        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);
    }

Vector 扩容代码

 private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        //Vector 除了自动扩容增长 100%,还能够通过构造函数指定每次扩容容量。
        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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值