list.add(i+“a”);
}
//测试随机访问时间
long startTime = System.currentTimeMillis();
for (int i = 0; i < list.size(); i++) {
//取出集合的每一个元素
list.get(i);
}
long endTime = System.currentTimeMillis();
System.out.println(“随机访问耗时:”+(endTime-startTime));
//测试顺序访问时间
long startTime2 = System.currentTimeMillis();
Iterator it = list.iterator();
while (it.hasNext()){
it.next();
}
long endTime2 = System.currentTimeMillis();
System.out.println(“顺序访问耗时:”+(endTime2-startTime2));
}
}
随机访问耗时:3
顺序访问耗时:4
由此可见,在数据量极大的情况下,ArrayList随机访问的效率远高于顺序访问
而LinkedList的数据结构是链表,且未实现RandomAccess接口,他的效率和ArrayList相比如何呢,我们来做一个
测试
package ArrayListProject.CloneTest;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class Test03 {
public static void main(String[] args) {
List list1 = new LinkedList<>();
for (int i = 0; i < 100000; i++) {
list1.add(i+“a”);
}
//测试随机访问时间
long startTime = System.currentTimeMillis();
for (int i = 0; i < list1.size(); i++) {
//取出集合的每一个元素
list1.get(i);
}
long endTime = System.currentTimeMillis();
System.out.println(“随机访问耗时:”+(endTime-startTime));
//测试顺序访问时间
long startTime2 = System.currentTimeMillis();
Iterator it = list1.iterator();
while (it.hasNext()){
it.next();
}
long endTime2 = System.currentTimeMillis();
System.out.println(“顺序访问耗时:”+(endTime2-startTime2));
}
}
随机访问耗时:11676
顺序访问耗时:4
由此可见,没有实现RandomAccess接口的LinkedList集合的随机访问速度远远小于顺序访问
===================================================================================
| Constructor | Constructor描述 |
| :-: | :-: |
| ArrayList() | 构造一个初始容量为10的空列表 |
| ArrayList(int initialCapacity) | 构造具有指定初始容量的空列表 |
| ArrayList(Collection<? extends E> c) | 构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序 |
===================================================================================
/**
- Constructs an empty list with an initial capacity of ten.
*/
//构造一个初始容量为10的数组
//DEFAULTCAPACITY_EMPTY_ELEMENTDATA:默认的空容量的数组
//elementData:集合真正存储数据的容器
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
👋2.2 ArrayList(int initialCapacity)构造方法
======================================================================================================
/**
-
Constructs an empty list with the specified initial capacity.
-
@param initialCapacity the initial capacity of the list
-
@throws IllegalArgumentException if the specified initial capacity
-
is negative
*/
public ArrayList(int initialCapacity) {
if (initialCapacity > 0) {
//如果传进来的变量大于0,则初始化一个指定容量的空数组
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
//传进来的变量=0,则不去创建新的数组,直接将已创建的EMPTY_ELEMENTDATA空数组传给
//ArrayList
this.elementData = EMPTY_ELEMENTDATA;
} else {
//传进来的指定数组容量不能<0
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
}
}
👋2.3 ArrayList(Collection<? extends E> c)构造方法
============================================================================================================
/**
-
Constructs a list containing the elements of the specified
-
collection, in the order they are returned by the collection’s
-
iterator.
-
@param c the collection whose elements are to be placed into this list
-
@throws NullPointerException if the specified collection is null
*/
public ArrayList(Collection<? extends E> c) {
//将构造方法中的参数转换成数组形式,其底层是调用了System.arraycopy()
elementData = c.toArray();
//将数组的长度赋值给size
if ((size = elementData.length) != 0) {
//检查elementData是不是Object[]类型,不是的话将其转换成Object[].class类型
if (elementData.getClass() != Object[].class)
//数组的创建与拷贝
elementData = Arrays.copyOf(elementData, size, Object[].class);
} else {
//size为0,则把已创建好的空数组直接给它
this.elementData = EMPTY_ELEMENTDATA;
}
}
===============================================================================
=============================================