JAVA中ArrayList和Vector两个数组

本文详细对比了ArrayList和Vector两种集合类的特点,包括线程安全性、扩容策略等,并探讨了如何使ArrayList线程安全,以及Vector实现线程安全的具体方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.ArrayList的总结

      

    //1.底层数组实现,使用默认的构造方法,初始化出来的容量是10(JDK 8 无参构造容量为0)
    //2.扩容的长度是元长度的基础上加二分之一
    //3.实现了RandomAccess接口,底层有事数组,get读取元素的性能很好
    //4.线程不安全,所有的方法均不是同步方法,也没有加锁,因此,多线程下慎用
    //5.顺序添加很方便    
    //6.删除和插入需要赋值数组性能很差(可以使用LinkindList)

ArrayList和Vector的区别

标准答案

    //1.ArrayList是线程不安全的,Vector是线程安全的
    //2.扩容时候ArrayList扩0.5倍,Vector扩1倍
    

那么问题来了

ArrayList有没有办法使线程安全?

Collection工具类有一个synchronizedList方法

可以把list变为线程安全的集合,但是意义不大,因为可以使用Vector

Vector为什么是线程安全的?

老实讲,抛开线程,它们两个的区别不大,但是多线程就不一样了,nameVectyor是如何实现线程安全的,我们来看几个关键的方法

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

public synchronized E remove(int index) {
  modCount++;
  if (index >= elementCount)
    throw new ArrayIndexOutOfBoundsException(index);
  E oldValue = elementData(index);

  int numMoved = elementCount - index - 1;
  if (numMoved > 0)
    System.arraycopy(elementData, index+1, elementData, index,
                     numMoved);
  elementData[--elementCount] = null; // Let gc do its work

  return oldValue;
}

就代码的实现上来说,和ArrayList并没有很多逻辑上的区别,但是Vector的关键方法都是用了synchronized修饰

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值