ArrayList、LinkedList、Vector性能比较

下面是集合的类层次结构图。你能从中得到一些基本的Java集合概念。

2. ArrayList vs. LinkedList vs. VectorArrayList的底层实现是一个可变数组。当元素被加到ArrayList时,它的尺寸是动态增加的。它的元素可以通过get和set方法被直接访问,由于ArrayList的本质是一个数组。LinkedList的底层实现是双向链表。它添加和移除元素的性能是优于Arraylist的,但是get和set方法是更差的。Vector 和 ArrayList是相似的, 但是它是线程安全的。 如果你的程序是线程安全的那么ArrayList是一个很好的选择。向Vector 和 ArrayList里面添加元素时需要更多的空间。Vector每次请求其大小的双倍空间,,而ArrayList每次对size增长50%。注意:默认情况下ArrayList的初始容量非常小,所以如果可以预估数据量的话,分配一个较大的初始值属于最佳实践,这样可以减少调整大小的开销。用下面的代码测试一下LinkedList和ArrayList的性能:import java.util.ArrayList;import java.util.LinkedList;public class ArrayListVsLinkedList {public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<Integer>();LinkedList<Integer> linkedList = new LinkedList<Integer>();// ArrayList addlong startTime = System.nanoTime();for (int i = 0; i < 100000; i++) {arrayList.add(i);}long endTime = System.nanoTime();long duration = endTime – startTime;System.out.println("ArrayList add: " + duration);// LinkedList addstartTime = System.nanoTime();for (int i = 0; i < 100000; i++) {linkedList.add(i);}endTime = System.nanoTime();duration = endTime – startTime;System.out.println("LinkedList add: " + duration);// ArrayList getstartTime = System.nanoTime();for (int i = 0; i < 10000; i++) {arrayList.get(i);}endTime = System.nanoTime();duration = endTime – startTime;System.out.println("ArrayList get: " + duration);// LinkedList getstartTime = System.nanoTime();for (int i = 0; i < 10000; i++) {linkedList.get(i);}endTime = System.nanoTime();duration = endTime – startTime;System.out.println("LinkedList get: " + duration);// ArrayList removestartTime = System.nanoTime();for (int i = 9999; i >=0; i–) {arrayList.remove(i);}endTime = System.nanoTime();duration = endTime – startTime;System.out.println("ArrayList remove: " + duration);// LinkedList removestartTime = System.nanoTime();for (int i = 9999; i >=0; i–) {linkedList.remove(i);}endTime = System.nanoTime();duration = endTime – startTime;System.out.println("LinkedList remove: " + duration);}}

输出结果如下

ArrayList add: 13265642LinkedList add: 9550057ArrayList get: 1543352LinkedList get: 85085551ArrayList remove: 199961301LinkedList remove: 85768810

简单来说,LinkedList更适用于:没有大规模的随机读取大量的增加/删除操作

看了哪些风景,遇到哪些人。尽管同学说,去旅行不在于记忆,

ArrayList、LinkedList、Vector性能比较

相关文章:

你感兴趣的文章:

标签云: