ArayList 和LinkedL ist的性能分析及适用场景及如何使用ArrayList创建二维数组

书籍是最好的营养品

经过对Arraylist和Linkedlist底层实现的详细介绍,读者应该对Arraylist和
Linkedlist之间的优劣有了一个大致的印象。 就笔者的经验来说,Arraylist的性能总体上优于Linkedlist

当程序需要以geim idex)方法获取List集合指定索引处的元素时,Arraylist性能大地优于Linkedlist因为AmayList底层以数组来保存集合元素,所以调用get( index)方法获取指定索引处的元素时,底层实际上是调用leleDalindexj来返回该元素,因此性能非常好。而LinkedList则必须逐个地搜索。

当程序调用adad index, Objeet ob)j向List集合中添加元素时,ArayList必须对底层数组元素进行“整体搬家”。如果添加元素导致集合长度超过底层数组长度,Arraylist必须创建一个长度为原来长度1.5倍的数组,再由垃圾回收机制回收原有数组,因此系统开销比较大。对于LinkedList而言,它的主要开销集中在entry(int index)方法上,该方法必须逐个地搜索,直到找到index处的元素,然后在该元素之前插入新元素。即使如此,执行该方法时LinkedList
方法的性能依然高于ArrayList。

当程序调用remove(int index)方法删除index索引处的元素时,ArrayList 同样也需要对底层数组元素进行“ 整体搬家”。但调用remove(int index)方法删除集合元素时,ArrayList 无须考虑创建新数组,因此执行ArrayList的remove(int index)方法比执行add(int index,Object obj)方法略快一点。 当LinkedList调用remove(int index)方法删除集合元素时,与调用add(int index,Object obj)方法添加元素的系统开销几乎完全相同。

当程序调用add(Object obj)方法向List 集合尾端添加一个 元素时,大部分时候ArrayList无须对底层数组元素进行“整体搬家”,因此也可以获得很好的性能(甚至比LinkedList 的add(Object obj)方法的性能更好);但如果添加这个元素导致集合长度超过底层数组长度,那么ArrayList必须创建-个长度为原来长度1.5 倍的数组,再由垃圾回收机制回收原有数组一这样系统开销就比较大了。但LinkedList调用add(Object obj方法添加元素时总可以获得较好的性能。

当程序把LinkedList当成双端队列、栈使用,调用addFirst(E e)、addLast(E e)、getFirst(E e)、getlast(E e)、fr(E e)、ofefFirt(ti oferLast等方法来操作集合元素时,LinkedLit可以快速地定位需要操作的元素,因此LinkedList总是具有较好的性能表现。

上面分析了Arraylist、LinkedList 各自的适用场景。大部分情况下,ArrayList 的性能总是优于Linkedlist,因此绝大部分都应该考虑使用ArrayList 集合。但如果程序经常需要添加、删除元素,尤其是经常需要调用add(E e)方法向集合中添加元素,则应该考虑使用LinkedList集合。

package 蓝桥杯;

import java.util.ArrayList;

public class Other_使用ArrayList创建二维数组 {

	public static void main(String[] args) {
		ArrayList[] arrayLists=new ArrayList[5];//定义5行
		for(int i=0;i<5;i++) {
			arrayLists[i]=new ArrayList<Integer>();//初始化
		}
		int num=0;
		for(int i=0;i<5;i++) {
			for(int j=0;j<10;j++) {
				arrayLists[i].add(num++);//赋值
			}
		}
		//输出
		for(int i=0;i<5;i++) {
			for(int j=0;j<10;j++) {
				System.out.print(arrayLists[i].get(j)+" ");
			}
			System.out.println();
		}
		
	}

}

输出显示:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值