ArrayList类是Java集合框架出现之后用来取代Vector类的:
二者底层原理都是基于数组的算法,一模一样.
区别:
Vector: 所有的方法都使用了synchronized修饰符. 线程安全但是性能较低. 适用于多线程环境.
ArrayList:所有的方法都没有使用synchronized修饰符. 线程不安全但是性能较高.
即使以后在多线程环境下,我们也不使用Vector类:
ArrayList list = Collections.synchronizedList(new ArrayList(…));
常用方法参照与Vector类.
阅读源代码发现,Vector和ArrayList的源代码差异有点大(从设计上考虑).
有的时候某个方法需要返回一个ArrayList对象:
但是在该方法中,如果一个都没有查询到,我们不会返回null,我们会返回一个空集对象(没有元素的集合).
public ArrayList getAll()
{
//TODO
//return Collections.emptyList();//最好的方式.
return new ArrayList();//但是很多人最直观,最简单选用的方式
}
在Java7之前,即使使用new ArrayList创建对象,一个元素都不存储,但是在堆空间依然初始化了长度位10的Object数组,没必要.
从Java7开始优化这个设计,new ArrayList,其实底层创建的使用一个空数组.
Object [] elementData = new Object[]{};
在第一次调用add方法的时候,才会重新去初始化数组.
ArrayList底层实现方法