最近看了《数据结构与算法分析: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
分享到:
相关推荐
【Java面试题】ArrayList和LinkedList区别
在 Java 中,ArrayList 和 LinkedList 是两种常用的集合类,它们各自具有不同的特性和适用场景,主要体现在数据结构、访问效率和操作性能上。 1. 数据结构: - ArrayList 实现了一个动态数组,它内部是一个 Object...
【Java基础——List接口详解(ArrayList、LinkedList、匿名类)】 在Java编程中,List接口是集合框架的重要组成部分,提供了有序存储元素的功能。ArrayList和LinkedList是List接口的两种主要实现,它们各有优缺点,...
总的来说,理解ArrayList和LinkedList的基本特性和应用场景,以及如何处理与之相关的安全性问题,是Java程序员必备的知识。通过深入学习和实践,可以更好地利用这些数据结构提升程序效率和质量。
在Java编程语言中,ArrayList、LinkedList和Vector是三种常见的动态数组实现,它们都在java.util包中,用于存储和管理对象的集合。这三个类都实现了List接口,提供了多种操作方法,但它们在内部实现和性能特性上有所...
在Java编程语言中,ArrayList和LinkedList都是集合框架中两种重要的列表实现,它们分别基于不同的数据结构,具有不同的特性和性能特点。以下是对这两个类的详细分析: 1. 数据结构: - ArrayList是基于动态数组的...
总之,理解ArrayList、LinkedList和Vector的内部工作原理和性能特征,可以帮助我们做出更明智的选择,优化代码性能,并避免不必要的资源消耗。在深入源码阅读和实践过程中,我们可以更深入地理解这些类的设计思想和...
本文件"arraylist-linkedlist-test.zip"主要探讨了在执行添加和删除元素操作时,LinkedList相对于ArrayList的性能优势。 ArrayList是基于动态数组的数据结构,它在内存中连续存储元素。由于数组的特性,访问任意...
ArrayList、LinkedList、Vector 是 Java 中常用的数据结构实现类,它们都实现了 List 接口,但它们在存储方式、性能、线程安全性等方面有着不同特点。 首先,ArrayList 和 Vector 都是采用数组方式存储数据的,这种...
在Java编程语言中,`ArrayList`与`LinkedList`都是`List`接口的具体实现类,用于存储元素集合。虽然它们都实现了同样的接口并且提供了相同的基本功能,但在内部实现机制、性能特点以及适用场景等方面存在显著差异。 ...
《ArrayList与LinkedList源码解析》 在Java编程中,ArrayList和LinkedList是两种常见的动态数组,它们都是Java集合框架的一部分,提供了对元素存储和操作的功能。本篇将深入探讨ArrayList和LinkedList的内部实现...
Java基础之集合List-ArrayList、LinkedList、Vector的底层实现和区别ArrayList底层实际是采用数组实现的(并且该数组的类型是
了解ArrayList、Vector和LinkedList的不同特性,可以帮助我们在实际开发中根据具体需求选择最适合的数据结构,从而优化程序性能。虽然JDK提供了丰富的集合框架,但掌握这些核心类的工作原理和适用场景,对于写出高效...
05丨ArrayList还是LinkedList?使用不当性能差千倍.html
day14-ArrayList集合 1.ArrayList 1.1ArrayList类概述【理解】 什么是集合 提供一种存储空间可变的存储模型,存储的数据容量可以发生改变 ArrayList集合的特点 底层是数组实现的,长度可以变化 泛型的使用 ...
测试ArrayList和LinkedList的add方法
ArrayList与LinkedList性能比较在java中 ArrayList和LinkedList是java中两个常用的实现List接口的类,它们之间的性能比较是一个非常重要的知识点。 首先,让我们来了解ArrayList和LinkedList的实现原理。ArrayList...
在Java的集合框架中,ArrayList和LinkedList是两种常用的列表实现,它们都实现了List接口,但它们在内存管理和操作效率上存在显著差异。了解这些差异并根据具体应用场景选择合适的列表类型,能够有效提升J2EE应用...
【ArrayList、LinkedList、Vector对比分析】 1. **List概述** List接口是Java集合框架中的重要组成部分,它是一个有序的集合,允许重复元素,并且保持插入顺序。List接口的实现类主要有ArrayList、LinkedList和...
但是,与`ArrayList`相比,`LinkedList`的随机访问性能较差,因为要查找特定位置的元素需要遍历链表。如果数据访问模式更倾向于按照顺序或者首尾操作,`LinkedList`则更为适合。 `Vector`是`java.util.Vector`类,...