ArrayList与LinkedList的使用与区别

ArrayList与LinkedList的使用与区别

ArrayList

  1. 其中最常用的是java.util.ArrayList;ArrayList内部基于数组+数据拷贝的实现,初始容量是10,当添加的元素位置超出容量时,会在原数组的容量基础上扩充为1.5倍;由于ArrayList是基于数组的实现,因此在进行数据检索时的效率很高,只需要获取到元素的索引就能快速定位到元素的位置,但是由于数组的长度一旦定义,则无法修改,因此在对ArrayList进行元素的添加和删除的时候会导致数组的容量发生变化,需要频繁的创建新数组的对象,因此在进行添加,删除时效率很低;ArrayList适合做查询不适合做修改(查快改慢)

ArrayList基本使用:

public class ArrayListDemo {

	public static void main(String[] args) {
		List<Object> list = new ArrayList<>();
		list.add("hello");
		list.add(true);
		list.add(10);
		list.add("he");
		list.add(10);
		//加入元素
		list .add(1,"world");
		System.out.println("集合中是否包含指定元素:"+list.contains("hello"));
		//替换元素
		list.set(1, "qikang");
		//截取一个子集合
		list = list.subList(2, 5);
		System.out.println(list.toString());
		
		Object[] objs = list.toArray();
		System.out.println(objs.length);
		//清空集合
		list.clear();
		System.out.println("集合是否为空:"+list.isEmpty());
	}

}

LinkedList

  1. LinkedList是基于双向链表的实现(链表的结构如下),在元素进行增删操作时,只需要修改链表的首尾指针即可轻松实现,因此LinkedList适合用于频繁的修改操作中;但是在进行元素的检索时,只能从链表头,链表尾部依次搜索,查询效率相对较低(LinkedList改快查慢)。LinkedList是List的子类,List中的方法LinkedList都是可以使用

LinkedList基本使用:

LinkedList list = new LinkedList();
list.add("rose");
list.add("jack");
list.add("bob");
list.add("tom");
list.add("jarry");
list.add("bob");
list.add(null);

//这里的数值不是索引,表示的链表需要进行节点搜索的次数
System.out.println(list.get(5));

for (Object obj : list) {
    System.out.println("--->"+obj);
}
System.out.println(list.size());

//向集合的头部插入元素
list.addFirst("123");
//向集合的尾部插入元素
list.addLast("789");
System.out.println(list.getFirst()+"获取头部元素");
System.out.println(list.getLast()+"获取尾部元素");

//从头部弹出元素(将元素从集合中删除)
System.out.println(list.pop());
//向集合中加入元素(等同addFirst)
list.push("456");
System.out.println(list);

总结:ArrayList与LinkedList的区别
在这里插入图片描述
ArrayList与LinkedList的存储方式如上图所示。
区别1:数据结构不同
ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构。
区别2:效率不同
当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。
当对数据进行增加和删除的操作(add和remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。
区别3:自由性不同
ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用。
区别4:主要控件开销不同
ArrayList主要控件开销在于需要在List列表预留一定空间;而LinkList主要控件开销在于需要存储结点信息以及结点指针信息。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值