Java集合类——Collection---List~Vector和ArrayList

Vector api
ArrayList api
ArrayList和Vector都是基于数组实现的List类,所以ArrayList和Vector类封装了一个动态的、允许再分配的Object[]数组。

ArrayList和Vector对象使用initialCapacity参数来设置该数组的长度,当向ArrayList或Vector中添加元素超出了该数组的长度时,它们的initialCapacity会自动增加(也就是再分配),一般来讲,不用关心initialCapacity。但如果向Vector或ArrayList添加大量元素时,可以使用ensureCapacity(int minCapacity)方法来一次性地增加initialCapacity,这可以减少重分配的次数,从而提高性能。
当创建ArrayList和Victor不指定initialCapacity参数,则默认为10

还有一个方法:trimToSize():调整ArrayList或Vector集合的Object[]数组长度为当前元素个数。这可以减少ArrayList和Vector集合对象占用的存储空间。

Vector和ArrayList在用法上几乎完全相同,但由于Vector是一个古老的集合(since
1.0),那时Java还没有提供系统的集合框架,所以Vector里提供了一些方法名很长的方法,例如:addElement(Object o)其实和add(Object
o)没有任何区别。从JDK1.2后,Java提供了系统的集合框架,就将Vector改为实现List的接口,作为List的实现之一,从而导致Vector里有一些功能重复的方法。

Vector的系列方法中方法名更短的方法属于后来新增的方法,方法名更长的则是Vector原有的方法。Java改写了Vector原有的方法,将其方法名缩短是为了简化编程。而ArrayList开始就作为List的主要实现类,因此没有那些方法名很长的方法。

除此之外,ArrayList和Vector的显著区别是:
ArrayList是线程不安全的(也就是说不同步的),当多个线程访问同一个ArrayList集合时,如果有超过一个线程修改了ArrayList集合,则程序必须手动保证该集合的同步性。
但Vector是线程安全的,无须保证该集合的同步性,但由于要维护同步,Vector的性能要比ArrayList低。

参考学习:
arrayList和vector的区别


固定长度的List——Arrays内部类的ArrayList

import java.util.Arrays;
import java.util.List;

/**
 * 有一个操作数组的工具类:Arrays,该工具类中提供了asList(Object o1,o2...)方法
 * 该方法可以把一个数组或指定个数的对象转换为一个List集合,
 * 但这个集合既不是Arraylist实现类的实例,也不是Vector实现类的实例,而是Arrays的内部类Arraylist的实例
 * 
 * Arrays.ArrayList是一个固定长度的List集合,程序只能遍历访问该集合里的元素,不可增加、删除该集合里的元素。
 */
public class ArrayListTest {
    public static void main(String[] args) {
        List fixed = Arrays.asList(1,2);
        //获取fixed的实现类将输出java.util.Arrays$ArrayList
        System.out.println(fixed.getClass()); 
        System.out.println(fixed);
        //使用方法遍历元素
        fixed.forEach(System.out::println);
        //进行添加或删除操作,会抛出UnsupportedOperationException异常
        fixed.add(3);
        fixed.remove(1);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值