ArrayList、LinkedList、Vector性能比较
2015-02-06 10:06
441 查看
下面是集合的类层次结构图。你能从中得到一些基本的Java集合概念。
2. ArrayList vs. LinkedList vs. Vector
ArrayList的底层实现是一个可变数组。当元素被加到ArrayList时,它的尺寸是动态增加的。它的元素可以通过get和set方法被直接访问,由于ArrayList的本质是一个数组。
LinkedList的底层实现是双向链表。它添加和移除元素的性能是优于Arraylist的,但是get和set方法是更差的。
Vector 和 ArrayList是相似的, 但是它是线程安全的。
如果你的程序是线程安全的那么ArrayList是一个很好的选择。向Vector 和 ArrayList里面添加元素时需要更多的空间。Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%。
注意:默认情况下ArrayList的初始容量非常小,所以如果可以预估数据量的话,分配一个较大的初始值属于最佳实践,这样可以减少调整大小的开销。
用下面的代码测试一下LinkedList和ArrayList的性能:
输出结果如下
简单来说,LinkedList更适用于:
没有大规模的随机读取
大量的增加/删除操作
2. ArrayList vs. LinkedList vs. Vector
ArrayList的底层实现是一个可变数组。当元素被加到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 add long 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 add startTime = 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 get startTime = 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 get startTime = 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 remove startTime = 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 remove startTime = 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: 13265642 LinkedList add: 9550057 ArrayList get: 1543352 LinkedList get: 85085551 ArrayList remove: 199961301 LinkedList remove: 85768810
简单来说,LinkedList更适用于:
没有大规模的随机读取
大量的增加/删除操作
相关文章推荐
- 比较Java数组,ArrayList,LinkedList,Vector 性能比较
- 多线程下:Vector、Hashtable、ArrayList、LinkedList、HashMap 性能特征
- Java使用Arrays、ArrayList、LinkedList、Vector实现插入查询性能分析
- Vector ArrayList LinkedList 的比较
- LinkedList ArrayList Vector的比较
- ArrayList、LinkedList、 Vector、Map 用法比较
- LinkedList、Vector和ArrayList之间的性能差异
- Java Collections Framework - Java集合框架之List篇 ArrayList与LinkedList等的性能比较
- ArrayList、LinkedList、 Vector、Map 用法比较
- java(20130801)异常、集合、ArrayList和LinkedList的比较、Vector和ArrayList的异同
- ArrayList、LinkedList、 Vector、Map 用法比较
- ArrayList、LinkedList、Vector三者比较
- Java Collections Framework - Java集合框架之List篇 ArrayList与LinkedList等的性能比较
- Java性能优化-Arraylist与Linkedlist整改查性能比较的简介与内容
- 关于LinkedList和ArrayList 插入元素的性能比较疑惑,知道的请指教......
- ArrayList和LinkedList的各项操作性能比较
- java性能优化-Arraylist与Linkedlist整改查性能比较
- 比较ArrayList、LinkedList、Vector
- 比较ArrayList、LinkedList、Vector
- paip.提升性能---list,arraylist,vector,linkedlist,map的选用..