ArrayList和LinkedList的各项操作性能比较
2013-08-12 17:28
447 查看
如果用java编写程序,我们通常存储易变的数据集合时用到的数据结构往往是ArrayList,不过,在JDK中还存在另一个结构--LinkedList,只不过我们通常不用,原因在于性能问题,下面,我就以一个问题来分析下这两个结构的性能差别。
问题:
自己编写一个测试程序,测试验证ArrayList和LinkedList在做增、删、改、遍历等操作上的性能差异。
首先,我先给出ArrayList的测试类:
下面,给出的是LinkedList的测试类:
好了,最后给出主测试程序:
测试的结果如下所示:
由结果我们可以得出结论:
1.两个结构在存储数据方面所用时间没有太大的区别
2.两个结构在更改,查询,删除结构中的数据时性能差别“巨大”,且ArrayList优于LinkedList很多,明显不是在一个数量级上
问题:
自己编写一个测试程序,测试验证ArrayList和LinkedList在做增、删、改、遍历等操作上的性能差异。
首先,我先给出ArrayList的测试类:
package com.brucezhang.arraylinkedtest; import java.util.ArrayList; public class My_ArrayList_Test { //定义循环次数常量 private static final int count = 100000; //定义ArrayList private ArrayList<Integer> my_array = new ArrayList<Integer>(); //存数据进ArrayList--增 public void addToArray() { long begin = System.currentTimeMillis(); for(int i = 0; i < count; i++){ my_array.add(i); } long over = System.currentTimeMillis(); System.out.println(" 操作 " + "ArrayList.add()方法需要的时间是:" + (over - begin) + " 毫秒 "); } //删除数据从ArrayList--删 public void delFromArray() { long begin = System.currentTimeMillis(); for(int i = 0; i < my_array.size(); i++){ my_array.remove(i); } long over = System.currentTimeMillis(); System.out.println(" 操作 " + "ArrayList.remove()方法需要的时间是:" + (over - begin) + " 毫秒 "); } //修改ArrayList中的数据--改 public void updateArray() { long begin = System.currentTimeMillis(); for(int i = 0; i < my_array.size(); i++){ my_array.set(i, i+1); } long over = System.currentTimeMillis(); System.out.println(" 操作 " + "ArrayList.set()方法需要的时间是:" + (over - begin) + " 毫秒 "); } //查询ArrayList中的数据--查 public void selFromArray() { long begin = System.currentTimeMillis(); for(int i = 0; i < my_array.size(); i++){ my_array.get(i); } long over = System.currentTimeMillis(); System.out.println(" 操作 " + "ArrayList.get()方法需要的时间是:" + (over - begin) + " 毫秒 "); } }
下面,给出的是LinkedList的测试类:
package com.brucezhang.arraylinkedtest; import java.util.LinkedList; public class My_LinkedList_Test { //定义循环次数常量 private static final int count = 100000; //定义LinkedList private LinkedList<Integer> my_link = new LinkedList<Integer>(); //存入数据进LinkedList--增 public void addToLink() { long begin = System.currentTimeMillis(); for(int i = 0; i < count; i++){ my_link.add(i); } long over = System.currentTimeMillis(); System.out.println(" 操作 " + "LinkedList.add()方法需要的时间是:" + (over - begin) + " 毫秒 "); } //删除数据从LinkedList--删 public void delFromLink() { long begin = System.currentTimeMillis(); for(int i = 0; i < my_link.size(); i++){ my_link.remove(i); } long over = System.currentTimeMillis(); System.out.println(" 操作 " + "LinkedList.remove()方法需要的时间是:" + (over - begin) + " 毫秒 "); } //修改LinkedList中的数据--改 public void updateLink() { long begin = System.currentTimeMillis(); for(int i = 0; i < my_link.size(); i++){ my_link.set(i, i+1); } long over = System.currentTimeMillis(); System.out.println(" 操作 " + "LinkedList.set()方法需要的时间是:" + (over - begin) + " 毫秒 "); } //查询LinkedList中的数据--查 public void selFromLink() { long begin = System.currentTimeMillis(); for(int i = 0; i < my_link.size(); i++){ my_link.get(i); } long over = System.currentTimeMillis(); System.out.println(" 操作 " + "LinkedList.get()方法需要的时间是:" + (over - begin) + " 毫秒 "); } }
好了,最后给出主测试程序:
package com.brucezhang.arraylinkedtest; public class Main_Class { /** * @param args * Author:DlutBruceZhang */ public static void main(String[] args) { // TODO Auto-generated method stub //测试ArrayList的各项操作 ArrayTest(); //测试LinkedList的各项操作 LinkTest(); } public static void ArrayTest(){ System.out.println("--------------------------------------------------"); My_ArrayList_Test arrayTest = new My_ArrayList_Test(); arrayTest.addToArray(); arrayTest.updateArray(); arrayTest.selFromArray(); arrayTest.delFromArray(); System.out.println("--------------------------------------------------"); } public static void LinkTest(){ System.out.println("--------------------------------------------------"); My_LinkedList_Test linkTest = new My_LinkedList_Test(); linkTest.addToLink(); linkTest.updateLink(); linkTest.selFromLink(); linkTest.delFromLink(); System.out.println("--------------------------------------------------"); } }
测试的结果如下所示:
-------------------------------------------------- 操作 ArrayList.add()方法需要的时间是:9 毫秒 操作 ArrayList.set()方法需要的时间是:7 毫秒 操作 ArrayList.get()方法需要的时间是:4 毫秒 操作 ArrayList.remove()方法需要的时间是:1311 毫秒 -------------------------------------------------- -------------------------------------------------- 操作 LinkedList.add()方法需要的时间是:9 毫秒 操作 LinkedList.set()方法需要的时间是:8715 毫秒 操作 LinkedList.get()方法需要的时间是:8700 毫秒 操作 LinkedList.remove()方法需要的时间是:6672 毫秒 --------------------------------------------------
由结果我们可以得出结论:
1.两个结构在存储数据方面所用时间没有太大的区别
2.两个结构在更改,查询,删除结构中的数据时性能差别“巨大”,且ArrayList优于LinkedList很多,明显不是在一个数量级上
相关文章推荐
- ArrayList和LinkedList的各项操作性能比较
- ArrayList和LinkedList的各项操作性能比较
- Linkedlist与ArrayList的各种操作性能对比-单线程对比
- ArrayList和LinkedList的操作性能对比
- Java Collections Framework - Java集合框架之List篇 ArrayList与LinkedList等的性能比较
- ArrayList和LinkedList性能比较
- Java中arraylist和linkedlist源码分析与性能比较
- Java性能优化-Arraylist与Linkedlist整改查性能比较的简介与内容
- Java Collections Framework - Java集合框架之List篇 ArrayList与LinkedList等的性能比较
- ArrayList和LinkedList性能比较分析
- 既然LinkedList比ArrayList性能和易用行好那么多 为啥我们还是用ArrayList用的比较多呢?
- 比较List和ArrayList的性能及ArrayList和LinkedList优缺点
- ArrayList和LinkedList性能比较
- ArrayList、LinkedList、Vector性能比较
- LinkedList与ArrayList的性能比较
- ArrayList与LinkedList性能比较
- ArrayList及LinkedList遍历方式及性能比较
- Java Collections Framework - Java集合框架之List篇 ArrayList与LinkedList等的性能比较
- ArrayList 与 LinkedList性能比较