Java 集合 Vector

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

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

List的实现之一

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

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

数据扩展方面

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

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

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的是,

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。

本文分享自微信公众号 - Android每日一讲(gh_f053f29083b9),作者:Phoenix

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 重构-委托代替继承

    继承是面向对象语言的优秀设计理念,但是滥用继承也会导致一些不必要的麻烦。 当我们写代码要继承某个类的是首先要考虑这些东西, · 子类是否需要父类的大部分功能 ·...

    PhoenixZheng
  • 你的手机摄像头可能正在被监控

    昨天晚上有用户Post了这么一张图, 他在使用 Telegram 聊天app的过程中没有打开摄像头拍照,但是摄像头却自己弹了出来。

    PhoenixZheng
  • 只用一行代码的单例模式

    作为Android开发者对Kotlin语言应该不会陌生, 下面这个单例模式就是用Kotlin写的,

    PhoenixZheng
  • 特朗普又双叒出手限制中国,硅谷科技公司先慌了

    量子位
  • C语言测试题

    2. 假设已指定i为整型变量,f为float变量,d为double型变量,e为long型,有下面式子:

    week
  • 19第一场 nowcoder F 爆搜

    题意:给n, 接下来2*n行,每行2*n列,aij表示第i个人对不在同一队的人的竞争值

    用户2965768
  • transformers模型上传和共享

    请在model_cards/文件夹下添加README.md到仓库中,其中model_cards/包括:模型描述,训练参数(数据集,预处理,超参数),评估结果,预...

    磐创AI
  • MySQL操作工资表,获取累计工资和月平均工资

    根据一个实际的需求案例,描述一下:如何在工资条中添加获取累计工资[字段]和月平均工资[字段]

    赵腰静
  • 几种有趣的益生菌

    人体肠道内共有的一种“友好”细菌——属于厚壁菌门(Firmicutes)梭菌科(Clostridiaceae),与8种人体的代谢物质有统计相关性;提示这种细菌在...

    用户1075469
  • JavaScript——执行环境、变量对象、作用域链

    这几天在看《javascript高级程序设计》,看到执行环境和作用域链的时候,就有些模糊了。书中还是讲的不够具体。通过上网查资料,特来总结,以备回顾和修正。

    喝茶去

扫码关注云+社区

领取腾讯云代金券