Arraylist和linkedlist的性能测试
2016-04-06 13:45
417 查看
1,通过源码角度分析Arraylist和 linkedlist的性能如下:
Add() | Remove(int i) | Set(int i, E e) | Get(int i) | |
Arraylist | O(1)-O(N) | O(N) | O(1) | O(1) |
Linkedlist | O(1) | O(N) | O(N) | O(N) |
2,这篇文章主要是通过用例测试来了解Arraylist和linkedlist的性能。代码如下:
package JavaTest.List.Testone; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; /** * @author weibinbin * */ public class ListCompareTest { private static final int COUNT = 100000; private static LinkedList linkedList = new LinkedList(); private static ArrayList arrayList = new ArrayList(); public static void main(String[] args) { // 换行符 System.out.println(); // 插入 insert(linkedList); insert(arrayList); // 换行符 System.out.println(); // 修改 setByPosition(linkedList); setByPosition(arrayList); // 换行符 System.out.println(); // 随机读取 readByPosition(linkedList); readByPosition(arrayList); //换行符 System.out.println(); // 删除 deleteByPosition(linkedList); deleteByPosition(arrayList); } // 获取list的名称 private static String getListName(List list) { if (list instanceof LinkedList) { return "LinkedList"; } else if (list instanceof ArrayList) { return "ArrayList"; } else { return "List"; } } // 向list的指定位置插入COUNT个元素,并统计时间 private static void insert(List list) { long startTime = System.currentTimeMillis(); // 向list的位置0插入COUNT个数 for (int i = 0; i < COUNT; i++) list.add(i); long endTime = System.currentTimeMillis(); long interval = endTime - startTime; System.out.println(getListName(list) + " : insert " + COUNT + " elements into the 1st position use time:" + interval + " ms"); } // 根据position,不断从list中读取元素,并统计时间 private static void setByPosition(List list) { long startTime = System.currentTimeMillis(); // 读取list元素 for (int i = 0; i < COUNT; i++) list.set(i, 0); long endTime = System.currentTimeMillis(); long interval = endTime - startTime; System.out.println(getListName(list) + " : set" + COUNT + " elements by position use time:" + interval + " ms"); } // 从list的指定位置删除COUNT个元素,并统计时间 private static void deleteByPosition(List list) { long startTime = System.currentTimeMillis(); // 删除list第一个位置元素 for (int i = 0; i<COUNT; i++) list.remove(0); long endTime = System.currentTimeMillis(); long interval = endTime - startTime; System.out.println(getListName(list) + " : delete " + COUNT + " elements from the 1st position use time:" + interval + " ms"); } // 根据position,不断从list中读取元素,并统计时间 private static void readByPosition(List list) { long startTime = System.currentTimeMillis(); // 读取list元素 for (int i = 0; i < COUNT; i++) list.get(i); long endTime = System.currentTimeMillis(); long interval = endTime - startTime; System.out.println(getListName(list) + " : read " + COUNT + " elements by position use time:" + interval + " ms"); } }
3,实验的数据结果如下:
Add() | Remove(int i) | Set(int i, E e) | Get(int i) | |
Arraylist | 16ms | 1149ms | 1ms | 4ms |
Linkedlist | 15ms | 0ms | 6511ms | 6542ms |
4,结果分析
实验结果基本和预期的源码分析结果一致,只是在linkedlist在删除数据的时候,性能突然大幅度的提高,主要是因为在删除的时候,删除的是链表的头指针所指向的元素,并不需要遍历链表。相关文章推荐
- ubuntu12.04搭建android开发环境
- 二维码扫描
- 保存数据到手机sd卡(QQ登录保存密码)
- [ios]使用Masonry为自定义view添加约束时,得先把自定义view添加到父视图上
- TestDataStream的用法
- Linux系统中对SSD硬盘优化的方法
- Spring容器中的Bean几种初始化方法和销毁方法的先后顺序
- linux下指定mysql数据库服务器主从同步的配置实例
- 设计模式之原型模式
- java IO字符流的使用记录
- Python--网页更新监控工具
- 网络爬虫开发技术——快速线程池爬虫
- 四则运算4
- 旅途的意义 ——《解忧杂货店》
- apache lucene介绍
- 各种数据库对应的jar包、驱动类名和URL格式
- CCF-ISBN号码
- Java反射-初步入门
- 网页嵌入WMP代码(转)
- mfc悬浮窗的实现