`
renjieguixiong5
  • 浏览: 75353 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

java性能优化-Arraylist与Linkedlist整改查性能比较

阅读更多

          最近看了《数据结构与算法分析:Java语言描述(第2版) 》中的第三章表、栈和队列结构部分:学习了一下ArrayList与LinkedList的实现方式。

以下是我的一些看法:

         ArrayList底层就是一个数组。

         LinkedList底层则是一个双向链表。

所以他们在增删改查方面性能上有很大的不同:

         ArrayList遍历:建议用get(速度是超音速级别),也可用iterator借口实现;

                       增:如果是顺序一次往Arraylist中增加对象,可以采用;

                       增加删除修改:如果是位置不再数组末尾,而是在数组中间某个位置,则就不要用ArrayList,特别是频繁的增删改Arraylist中的数据。

         LinkedList遍历:坚决不能用get方法(速度是蜗牛级别的),最好用iterator借口实现;

                       增删改:非常建议用linkedList(速度相对于Arraylist是超音速级别)。

 总结:只遍历用Arrarlist,只要有修改就用linkedList,如果修改中还有遍历则是LinkedList+iterator借口遍历。

 

 以下是比较程序(10w):

 

package test.arraylist;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;

public class arraylistTest {

	public static void main(String[] args) {
		ArrayList<String> alist = new ArrayList<String>();
		LinkedList<String> llist = new LinkedList<String>();
		
		/*
		 * 普通的add方法比较
		 * */
		long abegin = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			alist.add(String.valueOf(i));
		}
		long aend = System.currentTimeMillis();
		System.out.println("arraylist time:" + (aend - abegin));

		long lbegin = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			llist.add(String.valueOf(i));
		}
		long lend = System.currentTimeMillis();
		System.out.println("linkedlist time:" + (lend - lbegin));

		
		/*
		 * 普通的get方法遍历比较
		 * */
		long agbegin = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			alist.get(i);
		}
		long agend = System.currentTimeMillis();
		System.out.println("arraylist time get:" + (agend - agbegin));

		long lgbegin = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			llist.get(i);
		}
		long lgend = System.currentTimeMillis();
		System.out.println("linkedlist time get:" + (lgend - lgbegin));

		
		/*
		 *iterator方法遍历比较
		 * */
		long lgibegin = System.currentTimeMillis();
		for (Iterator iterator = llist.iterator(); iterator.hasNext();) {
			 iterator.next();
		}
		long lgiend = System.currentTimeMillis();
		System.out.println("arraylist time get iterator:" + (lgiend - lgibegin));
		
		
		long agibegin = System.currentTimeMillis();
		for (Iterator iterator = alist.iterator(); iterator.hasNext();) {
			 iterator.next();
		}
		long agiend = System.currentTimeMillis();
		System.out.println("linkedlist time get iterator:" + (agiend - agibegin));
	}
}

  

 结果:

arraylist add time :94
linkedlist add time :93
arraylist get time :0
linkedlist get time :86969
arraylist iterator time :16
linkedlist iterator time :0

 

 

 

 

 

分享到:
评论
2 楼 sorriest-siben 2013-07-18  
为什么每次执行的结果不一样呢
1 楼 aa87963014 2012-03-27  
之所以get耗时为0,我想是虚拟机优化的结果,直接跳过了这步

相关推荐

    【Java面试题】ArrayList和LinkedList区别

    【Java面试题】ArrayList和LinkedList区别

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

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

    java基础--list(ArrayList、LinkedList、匿名类).docx

    【Java基础——List接口详解(ArrayList、LinkedList、匿名类)】 在Java编程中,List接口是集合框架的重要组成部分,提供了有序存储元素的功能。ArrayList和LinkedList是List接口的两种主要实现,它们各有优缺点,...

    ArrayList和Linkedlist1

    总的来说,理解ArrayList和LinkedList的基本特性和应用场景,以及如何处理与之相关的安全性问题,是Java程序员必备的知识。通过深入学习和实践,可以更好地利用这些数据结构提升程序效率和质量。

    ArrayList LinkedList Vector性能测试

    在Java编程语言中,ArrayList、LinkedList和Vector是三种常见的动态数组实现,它们都在java.util包中,用于存储和管理对象的集合。这三个类都实现了List接口,提供了多种操作方法,但它们在内部实现和性能特性上有所...

    Java中ArrayList和LinkedList区别

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

    ArrayList LinkedList Vector性能对比

    总之,理解ArrayList、LinkedList和Vector的内部工作原理和性能特征,可以帮助我们做出更明智的选择,优化代码性能,并避免不必要的资源消耗。在深入源码阅读和实践过程中,我们可以更深入地理解这些类的设计思想和...

    arraylist-linkedlist-test.zip

    本文件"arraylist-linkedlist-test.zip"主要探讨了在执行添加和删除元素操作时,LinkedList相对于ArrayList的性能优势。 ArrayList是基于动态数组的数据结构,它在内存中连续存储元素。由于数组的特性,访问任意...

    ArrayList LinkedList Vector区别

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

    关于arraylist和linkedList的区别

    在Java编程语言中,`ArrayList`与`LinkedList`都是`List`接口的具体实现类,用于存储元素集合。虽然它们都实现了同样的接口并且提供了相同的基本功能,但在内部实现机制、性能特点以及适用场景等方面存在显著差异。 ...

    ArrayList-LinkedList-源码.rar

    《ArrayList与LinkedList源码解析》 在Java编程中,ArrayList和LinkedList是两种常见的动态数组,它们都是Java集合框架的一部分,提供了对元素存储和操作的功能。本篇将深入探讨ArrayList和LinkedList的内部实现...

    ii0#book-3#ArrayList 、 LinkedList 、 Vector 的底层实现和区别1

    Java基础之集合List-ArrayList、LinkedList、Vector的底层实现和区别ArrayList底层实际是采用数组实现的(并且该数组的类型是

    ArrayList Vector LinkedList 区别与用法.

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

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

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

    跟我学Java-day14-ArrayList集合.pdf

    day14-ArrayList集合 1.ArrayList 1.1ArrayList类概述【理解】 什么是集合 提供一种存储空间可变的存储模型,存储的数据容量可以发生改变 ArrayList集合的特点 底层是数组实现的,长度可以变化 泛型的使用 ...

    测试ArrayList和LinkedList的add方法

    测试ArrayList和LinkedList的add方法

    java 中ArrayList与LinkedList性能比较

    ArrayList与LinkedList性能比较在java中 ArrayList和LinkedList是java中两个常用的实现List接口的类,它们之间的性能比较是一个非常重要的知识点。 首先,让我们来了解ArrayList和LinkedList的实现原理。ArrayList...

    合理运用ArrayList与LinkedList

    在Java的集合框架中,ArrayList和LinkedList是两种常用的列表实现,它们都实现了List接口,但它们在内存管理和操作效率上存在显著差异。了解这些差异并根据具体应用场景选择合适的列表类型,能够有效提升J2EE应用...

    比较ArrayList、LinkedList、Vector1

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

    ArrayList-LinkedList--Vector-Map.zip_vector

    但是,与`ArrayList`相比,`LinkedList`的随机访问性能较差,因为要查找特定位置的元素需要遍历链表。如果数据访问模式更倾向于按照顺序或者首尾操作,`LinkedList`则更为适合。 `Vector`是`java.util.Vector`类,...

Global site tag (gtag.js) - Google Analytics