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);
}
}