Java Vector和ArrayList的异同点是什么

这篇文章主要讲解了“Java Vector和ArrayList的异同点是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java Vector和ArrayList的异同点是什么”吧!

1.相同点

(1)都是有序集合。

(2)数据不允许重复。

(3)都实现了list接口。

(4)都是通过数组实现的。

(5)数组进行复制、移动、代价比较高,因此,适合随机查询和遍历,不适合插入和删除

2.不同点

(1)ArrayList属于线程不安全(线程不同步)即当多线程进行对ArrayList集合的操作时,有可能对数据进行不正确的操作。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些。

(2)Vector是线程安全的(同步线程)即当在同一时刻只能有一个线程进行对Vector集合的操作时,但是Vector要做到线程同步,需要大量的花费,可能消耗大量的内存或者cpu。如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们再去考虑和编写线程安全的代码

(3)ArrayList在内存不够时认扩展1.5倍,Vector是认扩展1倍。

(4)Vector提供indexOf(object,start)接口,ArrayList没有。

3.实例代码对比

ArrayList中:

public boolean add(E e) {
 
   
 
    ensureCapacity(size + 1);  // 增加元素,判断是否能够容纳。不能的话就要新建数组
 
    
 
    elementData[size++] = e;
 
   
 
    return true;
 
   
 
}
 
   
 
 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);
 
   
 
    }
 
   
 
}

感谢各位的阅读,以上就是“Java Vector和ArrayList的异同点是什么”的内容了,经过本文的学习后,相信大家对Java Vector和ArrayList的异同点是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程之家,小编将为大家推送更多相关知识点的文章,欢迎关注!

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...