ArrayList源代码分析(总结)

结合API文档和网上搜索来的ArrayList的特效来总结下:

API文档是如此介绍ArrayList的:

接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于 Vector 类,除了此类是不同步的。)

 Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差。

 

List允许有相同的元素

ArrayList的方法都没有同步,所以在多线程中是不安全的,必须自己同步

toArray()方法返回的是和原列表相同的对象,也就是说:
arrayList.toArray()[0]==arrayList.get(0)返回的是true(假定arrayList不空)。

clone()方法是一个浅拷贝。

API文档:

在添加大量元素前,应用程序可以使用 ensureCapacity 操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量
可以通过自己调用ensureCapacity()提高效率

创建同步线程的ArrayList

List list = Collections.synchronizedList(new ArrayList(...));

 

ArrayList提供了4种添加方法:

	list.add(e);
	list.add(index, element);
	list.addAll(c);
	list.addAll(index, c);

 每次添加都调用ensureCapacity()方法,扩大容量是每次是1.5倍

	list.set(index, element);
	list.add(index, element);

 set是用指定的元素替代此列表中指定位置上的元素

add是将指定的元素插入此列表中的指定位置。向右移动当前位于该位置的元素

 

对于新增和删除操作add和remove,ArrayList要移动数据。所以性能不是很好

而访问数据是直接根据数组下标来获得数据的,所以速度很快

 

 移除ArrayList内重复数据:

	public static void removeDuplicate(List arlList) {
		HashSet h = new HashSet(arlList);
		arlList.clear();
		arlList.addAll(h);
	}

 除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个 ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。   

你可能感兴趣的:(JDK源码分析)