分别对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();
}
}
分享到:
相关推荐
这篇性能测试着重探讨了这三者在随机读取、插入和删除操作时的表现。 1. ArrayList: ArrayList是基于数组实现的列表,它维护了一个Object类型的数组,并通过索引来访问元素。由于数组的特性,ArrayList在进行随机...
ArrayList、LinkedList、Vector 是 Java 中常用的数据结构实现类,它们都实现了 List 接口,但它们在存储方式、性能、线程安全性等方面有着不同特点。 首先,ArrayList 和 Vector 都是采用数组方式存储数据的,这种...
ArrayList、Vector、LinkedList 的区别 在 Java 集合框架中,ArrayList、Vector、LinkedList 是...ArrayList、Vector、LinkedList 三个类各有其特点和性能特征,在实际应用中,选择哪个类取决于具体的需求和性能要求。
测试ArrayList和LinkedList的add方法
在实际开发中,应根据应用需求和性能测试结果来选择最适合的集合类型。例如,在大数据量且不涉及线程安全的情况下,ArrayList通常优于LinkedList和Vector。如果需要线程安全且对性能要求不高,可以选择Vector。当然...
在Java编程语言中,ArrayList、Vector和LinkedList是三种常见的动态数组实现,它们都属于集合框架中的List接口。这里我们将深入探讨这三种数据结构的源码,理解它们的内部实现、性能特性和适用场景。 首先,...
Java容器集合(equals和hashCode+基础数据结构+ArrayList+Vector和LinkedList) Java容器集合是Java中的一种基础数据结构,用于存储和管理数据。其中,equals和hashCode方法是Java容器集合中两个非常重要的方法,...
在IT领域,特别是Java编程中,ArrayList和LinkedList是两种非常重要的数据结构,它们都是List接口的实现类。理解这两者的区别对于优化程序性能至关重要。面试官询问这些知识点,旨在评估应聘者的理论基础和实践能力...
在Java编程语言中,ArrayList、ArrayDeque和LinkedList是三种常用的动态数组实现,它们各自具有不同的特点和适用场景。本文将详细解析这三种数据结构的区别,帮助开发者更好地理解它们的内部机制以及如何根据需求...
### 关于ArrayList与LinkedList的区别 在Java编程语言中,`ArrayList`与`LinkedList`都是`List`接口的具体实现类,用于存储元素集合。虽然它们都实现了同样的接口并且提供了相同的基本功能,但在内部实现机制、性能...
05丨ArrayList还是LinkedList?使用不当性能差千倍.html
在 Java 中,ArrayList 和 LinkedList 是两种常用的集合类,它们各自具有不同的特性和适用场景,主要体现在数据结构、访问效率和操作性能上。 1. 数据结构: - ArrayList 实现了一个动态数组,它内部是一个 Object...
了解ArrayList、Vector和LinkedList的不同特性,可以帮助我们在实际开发中根据具体需求选择最适合的数据结构,从而优化程序性能。虽然JDK提供了丰富的集合框架,但掌握这些核心类的工作原理和适用场景,对于写出高效...
【Java面试题】ArrayList和LinkedList区别
1,ArrayList是数组的数据结构,LinkedList是链表的数据结构。 2,随机访问的时候,ArrayList的效率比较高,因为LinkedList要移动指针,而ArrayList是基于 3,索引(index)的数据结构,可以直接映射到。 4,插入、...
Java编程语言中的`Map`, `List`, `ArrayList` 和 `LinkedList` 是四个核心的数据结构,它们在实际开发中被广泛使用。了解它们的源码对于深入理解Java集合框架的内部工作原理至关重要,尤其是对初学者而言,这有助于...
在Java编程语言中,ArrayList和LinkedList都是集合框架中两种重要的列表实现,它们分别基于不同的数据结构,具有不同的特性和性能特点。以下是对这两个类的详细分析: 1. 数据结构: - ArrayList是基于动态数组的...
在Java的集合框架中,ArrayList和LinkedList是两种常用的列表实现,它们都实现了List接口,但它们在内存管理和操作效率上存在显著差异。...因此,开发者应根据具体需求和性能测试结果来决定使用哪种列表类型。
【ArrayList、LinkedList、Vector对比分析】 1. **List概述** List接口是Java集合框架中的重要组成部分,它是一个有序的集合,允许重复元素,并且保持插入顺序。List接口的实现类主要有ArrayList、LinkedList和...
`ArrayList`和`LinkedList`都是`List`接口的实现,但它们在内部实现和性能上有所不同: 1. 内存结构:`ArrayList`基于动态数组实现,元素存储在连续的内存空间;`LinkedList`则是通过双向链表实现,每个元素包含...