ArrayList和LinkedList add和remove方法的比较

ArrayList 是一种可增长的数组的实现。
使用ArrayList的优点在于 对 get和set的调用是花费常数时间。缺点就是有新的项插入,和现有的项删除代价昂贵,除非变动是
在ArrayList的末端进行。


使用LinkedList的优点在于新的项的插入和现有的项的删除开销很小。这意味着在表的前端进行添加和删除都是常数时间的操作
,因此LinkedList提供了addFirst,removeFirst,addLast,removeLast,以及getFirst和getLast等都有效的添加删除和访问。缺点
就在于它不容易作索引的,所以get的调用是昂贵的,除非非常接近表的两端。


下面就分别使用add和remove操作来看这两种集合有何差异。


先来看add方法。

package com.songwenjin.list;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class TestList {

	
	public static void makeList1(List<Integer> lst,int N){
		lst.clear();
		long start=System.currentTimeMillis();
		for(int i=0;i<N;i++){
			lst.add(i);
		}
		long end=System.currentTimeMillis();
		System.out.println("向表的末端添加"+N+"条花费的时间="+(end-start)+"毫秒");
	}
	
	//向表的末端添加数据
	public static void main(String[] args) {
		int N1=500000;
		int N2=1000000;
		List<Integer> arrayList=new ArrayList<Integer>();
		List<Integer> linkedList=new LinkedList<Integer>();
		makeList1(arrayList,N1);
		makeList1(arrayList,N2);
		
		makeList1(linkedList,N1);
		makeList1(linkedList,N2);
	}
}
打印结果如下

向表的末端添加500000条花费的时间=14毫秒
向表的末端添加1000000条花费的时间=39毫秒
向表的末端添加500000条花费的时间=16毫秒
向表的末端添加1000000条花费的时间=24毫秒


可以看到 不管是ArrayLisst(忽略动态扩容)还是LinkedList作为参数进行传递,运行时间都是O(n),就是说是常数的。因为add每次调用都是在表的末端进行从而花费的是常数时间(忽略ArrayList的动态扩容)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值