Arraylist和linkedlist的性能测试

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在删除数据的时候,性能突然大幅度的提高,主要是因为在删除的时候,删除的是链表的头指针所指向的元素,并不需要遍历链表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值