在学java数据结构的时候发现有LinkedList与ArrayList,就想知道他们的性能如何,所以做了如下的对比,
对比做得比较粗糙,也很不严谨,不过也有一定的参考价值吧。
/*
* 测试数据大小 1000 - 100000
* 测试List的3个方法:
* 1、add(Element) 新加入元素
* 2、add(index,Element) 固定位置插入元素
* 3、remove(Element) 删除特定元素
* 结果为执行所需时间
*/
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class LinkListTest {
public static void main(String[] args) {
long time;
int TestNum ;
List<String> link_list = null;
List<String> array_list = null;
for(int j = 3 ; j <=5 ;j ++){
TestNum = (int)Math.pow(10, j);
System.out.println("Test amount :"+TestNum);
link_list = new LinkedList<String>();
array_list = new ArrayList<String>();
/*list add*/
time = System.currentTimeMillis();
for(int i = 0 ; i<TestNum ; i++){
link_list.add(i+"");
}
time = System.currentTimeMillis() - time;
System.out.printf("%18s:%6dms\n","link_list_add",time);
time = System.currentTimeMillis();
for(int i = 0 ; i<TestNum ; i++){
array_list.add(i+"");
}
time = System.currentTimeMillis() - time;
System.out.printf("%18s:%6dms\n","array_list_add",time);
/*list add index*/
time = System.currentTimeMillis();
for(int i = 0 ; i<TestNum ; i++){
link_list.add(i*2, i+"");
}
time = System.currentTimeMillis() - time;
System.out.printf("%18s:%6dms\n","link_list_insert",time);
time = System.currentTimeMillis();
for(int i = 0 ; i<TestNum ; i++){
array_list.add(i*2, i+"");
}
time = System.currentTimeMillis() - time;
System.out.printf("%18s:%6dms\n","arry_list_insert",time);
/*list remove index*/
time = System.currentTimeMillis();
for(int i = 0 ; i<TestNum ; i++){
link_list.remove(i);
}
time = System.currentTimeMillis() - time;
System.out.printf("%18s:%6dms\n","link_list_remove",time);
time = System.currentTimeMillis();
for(int i = 0 ; i<TestNum ; i++){
array_list.remove(i);
}
time = System.currentTimeMillis() - time;
System.out.printf("%18s:%6dms\n","array_list_remove",time);
System.out.printf("%18s:%8d\n","link_list_size",link_list.size());
System.out.printf("%18s:%8d\n","array_list_size",array_list.size());
link_list = null;
array_list = null;
System.gc();
}
}
}
测试结果:
Test amount :1000
link_list_add: 15ms
array_list_add: 31ms
link_list_insert: 0ms
arry_list_insert: 0ms
link_list_remove: 0ms
array_list_remove: 0ms
link_list_size: 1000
array_list_size: 1000
Test amount :10000
link_list_add: 16ms
array_list_add: 0ms
link_list_insert: 1000ms
arry_list_insert: 94ms
link_list_remove: 750ms
array_list_remove: 156ms
link_list_size: 10000
array_list_size: 10000
Test amount :100000
link_list_add: 141ms
array_list_add: 265ms
link_list_insert:186797ms
arry_list_insert: 12344ms
link_list_remove:178812ms
array_list_remove: 28954ms
link_list_size: 100000
array_list_size: 100000
发现一个很有趣的现象,在数据比较小的时候LinkedList的执行速度很快,
在数据比较大的时候,很明显的看出ArrayList的执行速度更快,
与自己的想象刚好相反。
分享到:
相关推荐
Java 中 ArrayList 与 LinkedList 对比详情 在 Java 中,ArrayList 和 LinkedList 是两个常用的集合实现方式,它们都实现了 Collection 接口,但是它们之间存在着一些关键的差异。本文将通过实例对比 Java 中 ...
2. **线程安全**:ArrayList和LinkedList不是线程安全的,如果在多线程环境中使用,需要手动添加同步机制,或者选择Vector。 3. **内存消耗**:LinkedList比ArrayList和Vector占用更多的内存,因为它需要存储额外的...
在Java编程语言中,`ArrayList`与`LinkedList`都是`List`接口的具体实现类,用于存储元素集合。虽然它们都实现了同样的接口并且提供了相同的基本功能,但在内部实现机制、性能特点以及适用场景等方面存在显著差异。 ...
测试可能会对比ArrayList的get、add、remove等操作与直接操作数组的性能差异,通过运行时间或者循环次数来量化这种差异。这样的测试对于理解ArrayList的工作原理和性能瓶颈非常有帮助。 在实际应用中,如果对存取...
适用人群:JavaSE初学者,对源码感兴趣的,想要深度了解ArrayList底层实现、数据结构、add方法、Remove方法、以及自动扩容机制的同学,并且对ArrayList已经有过使用,想要学习它与LinkedList,Vector等的区别,该...
【ArrayList、LinkedList、Vector对比分析】 1. **List概述** List接口是Java集合框架中的重要组成部分,它是一个有序的集合,允许重复元素,并且保持插入顺序。List接口的实现类主要有ArrayList、LinkedList和...
在Java集合框架中,Vector、ArrayList和LinkedList是三种常见的List接口实现类,它们各自具有不同的特点和适用场景。下面我们将详细对比这三个类的区别。 1. **Vector** - **线程安全**:Vector是线程安全的,因为...
ArrayList与LinkedList是Java集合框架中两种常见的列表结构,它们都实现了List接口,但在实现方式和性能上有所不同。 **ArrayList源码分析** ArrayList内部基于动态数组实现,它的核心数据成员是一个Object类型的...
在Java集合框架中,Vector、ArrayList和LinkedList都是List接口的实现,它们提供了有序集合的功能,允许根据位置进行元素的添加、删除和查找。然而,它们在设计和性能上有着显著的区别。 首先,Vector是Java早期...
ArrayList和LinkedList是Java集合框架中两种重要的动态数组实现,它们都是List接口的实现类,但它们在存储和操作数据方面有着显著的区别。本文件"arraylist-linkedlist-test.zip"主要探讨了在执行添加和删除元素操作...
Java中的LinkedList和ArrayList是两种非常常见的集合类,它们都是List接口的实现,但在实现方式和性能特性上有所不同。本文将详细探讨这两种数据结构的使用场景、底层原理以及性能对比。 LinkedList是一个基于双向...
在Java编程语言中,`ArrayList`和`LinkedList`都是`java.util`包下实现List接口的两种重要数据结构。它们各自具有不同的特性和用途,适用于不同的场景。本篇将深入探讨`ArrayList`和`LinkedList`的基本概念、工作...
在Java编程语言中,ArrayList和LinkedList都是集合框架中两种重要的列表实现,它们分别基于不同的数据结构,具有不同的特性和性能特点。以下是对这两个类的详细分析: 1. 数据结构: - ArrayList是基于动态数组...
10. ArrayList与LinkedList对比 ArrayList适合频繁进行随机访问但不常插入和删除的场景,而LinkedList适合于频繁插入和删除,但随机访问效率低。 总结,ArrayList是Java集合框架中一个重要的容器,了解其基本操作和...
最后,在"黑马程序员_毕向东_Java基础视频教程第14天-10-集合框架(ArrayList练习).avi"中,他会介绍ArrayList的用法,并通过练习来对比ArrayList与LinkedList在不同场景下的性能差异。 总的来说,这个系列课程旨在...
在实际的Java开发中,理解ArrayList与其他集合类(如LinkedList、HashSet、HashMap等)之间的区别和使用场景至关重要。熟练掌握ArrayList的操作和优化技巧,能够帮助开发者编写出更加高效、易维护的代码。此外,了解...
本文将深入探讨LinkedList的实现原理、核心方法的代码实现,并对比ArrayList,理解其特性和使用场景。 首先,LinkedList底层采用链表数据结构,这种结构允许在任意位置插入和删除元素,而不需要移动其他元素。链表...
2. **Java集合框架**:在处理专利数据时,可能会用到ArrayList、LinkedList、HashMap等集合类来存储和操作数据。了解这些数据结构的特性及其在不同场景下的适用性是必要的。 3. **文件操作与IO流**:为了读取和写入...