首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java 集合 Vector

Java 集合 Vector

作者头像
PhoenixZheng
发布2018-08-07 16:22:11
发布2018-08-07 16:22:11
3530
举报

Vector相对于 ArrayList,可能在非并发场景下出现的比较少,

但是对于高并发开发来说, Vector是不可或缺的。

List的实现之一

List有三种实现,ArrayList, LinkedList, Vector, 它们的区别在于, ArrayList是非线程安全的, Vector则是线程安全。

而至于 ArrayList和 LinkedList的区别呢, 在于 ArrayList是用数组来存储数据,LinkedList 用链表存储数据。

数据扩展方面

Vector拥有着和 ArrayList一样的存储方式, 它也是基于数组的。

不同的是,当数组大小不够存储新数据时他俩的扩展方式不同。 具体代码提现在这里, ArrayList的扩展逻辑是这样的

代码语言:javascript
复制
public void ensureCapacity(int minCapacity) {

   modCount++;

   int oldCapacity = elementData.length;

   if (minCapacity > oldCapacity) {

       Object oldData[] = elementData;

       int newCapacity = (oldCapacity * 3)/2 + 1; // 增加新的数组的大小

       if (newCapacity < minCapacity)

      newCapacity = minCapacity;

           // minCapacity is usually close to size, so this is a win:

           elementData = Arrays.copyOf(elementData, newCapacity);

   }

}

而 Vector的是,

代码语言:javascript
复制
private void ensureCapacityHelper(int minCapacity) {

    int oldCapacity = elementData.length;

    if (minCapacity > oldCapacity) {

        Object[] oldData = elementData;

        int newCapacity = (capacityIncrement > 0) ?

       (oldCapacity + capacityIncrement) : (oldCapacity * 2); //区别处

        if (newCapacity < minCapacity) {

       newCapacity = minCapacity;

        }

         elementData = Arrays.copyOf(elementData, newCapacity);

    }

}

结论是, 虽然都是用数组存储数据, 但是ArrayList扩展数组时,默认扩展 50% + 1个, 而 Vector扩展 2倍。

总结

Vector是线程安全的, 在空间不足时,它会默认扩展2倍的数组来存储数据。 而 ArrayList是线程不安全的, 在高并发的场景下,应该使用 Vector来代替 ArrayList。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android每日一讲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • List的实现之一
  • 数据扩展方面
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档