`
peacesoft
  • 浏览: 594 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

测试发现,ArrayList性能全面超越LinkedList

阅读更多
分别对ArrayList和LinkedList的批量插入、遍历访问、随机访问、随机插入、随机删除进行了性能测试,发现ArrayList的性能居然完胜LinkedList,包括随机插入和删除数据(JDK是1.6),测试结果如下:
时间单位:毫秒
一万条数据测试:
ArrayList中插入10000条数据,共花费:3
LinkedList中插入10000条数据,共花费:5
ArrayList中遍历全部数据,共花费:2
LinkedList中遍历全部数据,共花费:136
ArrayList中随机访问1000数据,共花费:1
LinkedList中随机访问1000数据,共花费:15
ArrayList中随机插入1000数据,共花费:5
LinkedList中随机插入1000数据,共花费:15
ArrayList中随机删除1000数据,共花费:5
LinkedList中随机删除1000数据,共花费:15

十万条数据测试:
ArrayList中插入100000条数据,共花费:18
LinkedList中插入100000条数据,共花费:38
ArrayList中遍历全部数据,共花费:6
LinkedList中遍历全部数据,共花费:12875
ArrayList中随机访问1000数据,共花费:0
LinkedList中随机访问1000数据,共花费:155
ArrayList中随机插入1000数据,共花费:43
LinkedList中随机插入1000数据,共花费:156
ArrayList中随机删除1000数据,共花费:42
LinkedList中随机删除1000数据,共花费:158

百万条数据测试
ArrayList中插入1000000条数据,共花费:186
LinkedList中插入1000000条数据,共花费:435
ArrayList中遍历全部数据,共花费:19
LinkedList在遍历全部数据时,超过10分钟还未遍历完,直接结束程序了

测试代码:


import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;

public class TestList {
	private static int total = 1000000;
	private static List<Integer> aList = new ArrayList<Integer>();//后面再演示先定义长度的
	private static List<Integer> lList = new LinkedList<Integer>();
	
	/**
	 * 演示批量插入数据
	 */
	private static void testBatchInsert() {
		Random r = new Random();
		//测试ArrayList
		long beginTime = System.currentTimeMillis();
		for (int i = 0; i < total; i++) {
			aList.add(r.nextInt());//在最后插入数据,使用add()方法
		}
		long endTime = System.currentTimeMillis();
		System.out.println("ArrayList中插入" + total + "条数据,共花费:" + (endTime - beginTime));
		
		//测试LinkedList
		beginTime = System.currentTimeMillis();
		for (int i = 0; i < total; i++) {
			lList.add(r.nextInt());//在最后插入数据,使用add()方法
		}
		endTime = System.currentTimeMillis();
		System.out.println("LinkedList中插入" + total + "条数据,共花费:" + (endTime - beginTime));
	}
	
	/**
	 * 测试遍历访问全部数据
	 */
	private static void testTraverseAccess() {
		//测试ArrayList
		long beginTime = System.currentTimeMillis();
		for (int i = 0; i < aList.size(); i++) {
			aList.get(i);//通过get(int i)方法获得
		}
		long endTime = System.currentTimeMillis();
		System.out.println("ArrayList中遍历全部数据,共花费:" + (endTime - beginTime));

		//测试LinkedList
		beginTime = System.currentTimeMillis();
		for (int i = 0; i < lList.size(); i++) {
			lList.get(i);//通过get(int i)方法获得
		}
		endTime = System.currentTimeMillis();
		System.out.println("LinkedList中遍历全部数据,共花费:" + (endTime - beginTime));
	}
	
	/**
	 * 测试随机访问数据
	 */
	private static void testRandomAccess() {
		int num = 1000;
		Random r = new Random();
		
		//测试ArrayList
		long beginTime = System.currentTimeMillis();
		for(int i = 0; i < num; i++) {
			aList.get(r.nextInt(aList.size()));
		}
		long endTime = System.currentTimeMillis();
		System.out.println("ArrayList中随机访问" + num + "数据,共花费:" + (endTime - beginTime));
		
		//测试LinkedList
		beginTime = System.currentTimeMillis();
		for(int i = 0; i < num; i++) {
			lList.get(r.nextInt(aList.size()));
		}
		endTime = System.currentTimeMillis();
		System.out.println("LinkedList中随机访问" + num + "数据,共花费:" + (endTime - beginTime));
	}
	
	/**
	 * 演示随机插入数据
	 */
	private static void testRandomInsert() {
		int num = 1000;
		Random r = new Random();
		
		//测试ArrayList
		long beginTime = System.currentTimeMillis();
		for(int i = 0; i < num; i++) {
			//通过list.add(int index, Integer element)在指定位置插入数据
			aList.add(r.nextInt(aList.size()), r.nextInt());
		}
		long endTime = System.currentTimeMillis();
		System.out.println("ArrayList中随机插入" + num + "数据,共花费:" + (endTime - beginTime));
		
		//测试LinkedList
		beginTime = System.currentTimeMillis();
		for(int i = 0; i < num; i++) {
			//通过list.add(int index, Integer element)在指定位置插入数据
			lList.add(r.nextInt(lList.size()), r.nextInt());
		}
		endTime = System.currentTimeMillis();
		System.out.println("LinkedList中随机插入" + num + "数据,共花费:" + (endTime - beginTime));
	}
	
	/**
	 * 演示随机删除数据
	 */
	private static void testRandomDelete() {
		int num = 1000;
		Random r = new Random();
		
		//测试ArrayList
		long beginTime = System.currentTimeMillis();
		for(int i = 0; i < num; i++) {
			//通过list.remove(int index)在指定位置删除数据
			aList.remove(r.nextInt(aList.size()));
		}
		long endTime = System.currentTimeMillis();
		System.out.println("ArrayList中随机删除" + num + "数据,共花费:" + (endTime - beginTime));
		
		//测试LinkedList
		beginTime = System.currentTimeMillis();
		for(int i = 0; i < num; i++) {
			//通过list.remove(int index)在指定位置删除数据
			lList.remove(r.nextInt(lList.size()));
		}
		endTime = System.currentTimeMillis();
		System.out.println("LinkedList中随机删除" + num + "数据,共花费:" + (endTime - beginTime));
	}
	
	public static void main(String[] args) {
		testBatchInsert();
		testTraverseAccess();
		testRandomAccess();
		testRandomInsert();
		testRandomDelete();
	}
}
分享到:
评论

相关推荐

    ArrayList LinkedList Vector性能测试

    这篇性能测试着重探讨了这三者在随机读取、插入和删除操作时的表现。 1. ArrayList: ArrayList是基于数组实现的列表,它维护了一个Object类型的数组,并通过索引来访问元素。由于数组的特性,ArrayList在进行随机...

    ArrayList LinkedList Vector区别

    ArrayList、LinkedList、Vector 是 Java 中常用的数据结构实现类,它们都实现了 List 接口,但它们在存储方式、性能、线程安全性等方面有着不同特点。 首先,ArrayList 和 Vector 都是采用数组方式存储数据的,这种...

    ArrayList、Vector、LinkedList 的区别.docx

    ArrayList、Vector、LinkedList 的区别 在 Java 集合框架中,ArrayList、Vector、LinkedList 是...ArrayList、Vector、LinkedList 三个类各有其特点和性能特征,在实际应用中,选择哪个类取决于具体的需求和性能要求。

    测试ArrayList和LinkedList的add方法

    测试ArrayList和LinkedList的add方法

    ArrayList LinkedList Vector性能对比

    在实际开发中,应根据应用需求和性能测试结果来选择最适合的集合类型。例如,在大数据量且不涉及线程安全的情况下,ArrayList通常优于LinkedList和Vector。如果需要线程安全且对性能要求不高,可以选择Vector。当然...

    JDK1.6中Arraylist,Vector,LinkedList源码

    在Java编程语言中,ArrayList、Vector和LinkedList是三种常见的动态数组实现,它们都属于集合框架中的List接口。这里我们将深入探讨这三种数据结构的源码,理解它们的内部实现、性能特性和适用场景。 首先,...

    Java容器集合(equals 和 hashCode+基础数据结构+ArrayList+Vector和LinkedList)

    Java容器集合(equals和hashCode+基础数据结构+ArrayList+Vector和LinkedList) Java容器集合是Java中的一种基础数据结构,用于存储和管理数据。其中,equals和hashCode方法是Java容器集合中两个非常重要的方法,...

    ArrayList和Linkedlist1

    在IT领域,特别是Java编程中,ArrayList和LinkedList是两种非常重要的数据结构,它们都是List接口的实现类。理解这两者的区别对于优化程序性能至关重要。面试官询问这些知识点,旨在评估应聘者的理论基础和实践能力...

    ArrayList、ArrayDeque与LinkedList区别md,学习代码

    在Java编程语言中,ArrayList、ArrayDeque和LinkedList是三种常用的动态数组实现,它们各自具有不同的特点和适用场景。本文将详细解析这三种数据结构的区别,帮助开发者更好地理解它们的内部机制以及如何根据需求...

    关于arraylist和linkedList的区别

    ### 关于ArrayList与LinkedList的区别 在Java编程语言中,`ArrayList`与`LinkedList`都是`List`接口的具体实现类,用于存储元素集合。虽然它们都实现了同样的接口并且提供了相同的基本功能,但在内部实现机制、性能...

    05丨ArrayList还是LinkedList?使用不当性能差千倍.html

    05丨ArrayList还是LinkedList?使用不当性能差千倍.html

    Java中ArrayList和LinkedList区别 时间复杂度 与空间复杂度1

    在 Java 中,ArrayList 和 LinkedList 是两种常用的集合类,它们各自具有不同的特性和适用场景,主要体现在数据结构、访问效率和操作性能上。 1. 数据结构: - ArrayList 实现了一个动态数组,它内部是一个 Object...

    ArrayList Vector LinkedList 区别与用法.

    了解ArrayList、Vector和LinkedList的不同特性,可以帮助我们在实际开发中根据具体需求选择最适合的数据结构,从而优化程序性能。虽然JDK提供了丰富的集合框架,但掌握这些核心类的工作原理和适用场景,对于写出高效...

    【Java面试题】ArrayList和LinkedList区别

    【Java面试题】ArrayList和LinkedList区别

    Arraylist与LinkedList区别

    1,ArrayList是数组的数据结构,LinkedList是链表的数据结构。 2,随机访问的时候,ArrayList的效率比较高,因为LinkedList要移动指针,而ArrayList是基于 3,索引(index)的数据结构,可以直接映射到。 4,插入、...

    Map+List+ArrayList+LinkedList Java源码

    Java编程语言中的`Map`, `List`, `ArrayList` 和 `LinkedList` 是四个核心的数据结构,它们在实际开发中被广泛使用。了解它们的源码对于深入理解Java集合框架的内部工作原理至关重要,尤其是对初学者而言,这有助于...

    Java中ArrayList和LinkedList区别

    在Java编程语言中,ArrayList和LinkedList都是集合框架中两种重要的列表实现,它们分别基于不同的数据结构,具有不同的特性和性能特点。以下是对这两个类的详细分析: 1. 数据结构: - ArrayList是基于动态数组的...

    合理运用ArrayList与LinkedList

    在Java的集合框架中,ArrayList和LinkedList是两种常用的列表实现,它们都实现了List接口,但它们在内存管理和操作效率上存在显著差异。...因此,开发者应根据具体需求和性能测试结果来决定使用哪种列表类型。

    比较ArrayList、LinkedList、Vector1

    【ArrayList、LinkedList、Vector对比分析】 1. **List概述** List接口是Java集合框架中的重要组成部分,它是一个有序的集合,允许重复元素,并且保持插入顺序。List接口的实现类主要有ArrayList、LinkedList和...

    list集合案例增、删、改、查,ArrayList与LinkedList的区别,LinkedList堆栈/队列的开发

    `ArrayList`和`LinkedList`都是`List`接口的实现,但它们在内部实现和性能上有所不同: 1. 内存结构:`ArrayList`基于动态数组实现,元素存储在连续的内存空间;`LinkedList`则是通过双向链表实现,每个元素包含...

Global site tag (gtag.js) - Google Analytics