Java中的List的实现类

本文介绍了Java中两种重要的List实现类——ArrayList和LinkedList。ArrayList基于数组实现,适合随机访问;LinkedList基于双向链表,适合频繁插入删除。同时,提到了栈和队列的数据结构特点,以及扩展知识中对Vector的简要介绍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、ArrayList集合

ArrayList集合,底层实现:采用数组的结构实现的。(最大的特点:内存连续)。
也会叫做变长数组。

	优点:遍历集合中的元素,效率很高
	缺点:更改集合中的元素,效率相对低。
	
JDK1.2版本

在这里插入图片描述

二、LinkedList集合

LinkedList集合:底层实现:采用双向链表的结构实现。
生活中的链表:
	珍珠项链,手链,自行车的链条。。
	
	优点:更改集合中的元素,效率很高。
	缺点:遍历集合中的元素,效率相对低。
	
queue:队伍,队列,行列
	生活中买电影票,排队
	生活中买火车票,排队
	
deque:double -ended queue,双端队列

LinkedList实现类,区别于ArrayList,除了实现List接口,还实现了Deque接口。

在这里插入图片描述

LinkedList实现类:
	实现的接口:
		List接口----------------------------------->Collection
		Deque(双端队列)接口----->Queue(队列)接口------>Collection
		
模拟栈的结构:后进先出(LIFO),栈顶元素,
	push(),压栈,入栈,pop(),弹栈,出栈
模拟队列的结构:先进先出(FIFO),队头元素
	offer(),poll()

栈的结构特点:

在这里插入图片描述

队列的结构特点:

在这里插入图片描述

public static void main(String[] args) {
		LinkedList<String> l1 = new LinkedList<>();
		
		l1.add("aaa");
		l1.add(0, "bbb");//List
		System.out.println(l1);
		l1.addFirst("ccc");//向容器的开头,添加元素,Deque
		System.out.println(l1);
		l1.addLast("ddd");//向容器的末尾,添加元素,Deque
		System.out.println(l1);
		
		System.out.println(l1.element());//获取容器中的第一个元素,不删除
		System.out.println(l1);
		
		System.out.println(l1.getFirst());//效果同element()
		System.out.println(l1);
		
		System.out.println(l1.getLast());//获取最后一个元素
		System.out.println(l1);
		
		l1.offer("eee");//向容器后添加元素
		System.out.println(l1);
		
		System.out.println(l1.peek());//效果同element()
		System.out.println(l1);
		
		System.out.println(l1.poll());//获取容器中的第一个元素,并从容器中删除
		System.out.println(l1);
		
		System.out.println(l1.pop());//获取栈顶元素,并移出。
		System.out.println(l1);
		
		
	}
public static void main(String[] args) {
		/*
		 * 栈:一种数据结构。存储数据的特点:LIFO
		 * 后进先出
		 */
		
		LinkedList<String> stack = new LinkedList<>();
		stack.push("aaa");//入栈,压栈,将元素存入到栈中
		stack.push("bbb");
		stack.push("ccc");
		System.out.println(stack);
		
		//获取-->弹栈,出栈,永远出的是栈顶元素----大白话:获取
		String s1 = stack.pop();
		System.out.println(s1);//弹栈,出栈,ccc
		System.out.println(stack);
		System.out.println(stack.pop());//bbb
		System.out.println(stack);
		System.out.println(stack.pop());//aaa
		System.out.println(stack);//空栈
//		System.out.println(stack.pop()); //空栈,不能再弹了,否则异常:java.util.NoSuchElementException
		
		
		stack.push("fff");
		System.out.println(stack);
	}

public static void main(String[] args) {
		/*
		 * 使用LinkedList模拟队列的存储:特点FIFO
		 * First In First Out
		 * 
		 * 消息队列:
		 */
		
		LinkedList<String> l2 = new LinkedList<>();
		l2.offer("aaa");//向队伍中添加元素,默认在队尾添加,效果同很多方法都能够实现:add(),addLast()....
		l2.offer("bbb");
		l2.offer("ccc");
		System.out.println(l2);
		
		System.out.println(l2.poll());//获取队头元素,并移除,,,aaa
		System.out.println(l2);
		System.out.println(l2.poll());//bbb
		System.out.println(l2);
		
	}

【扩展知识1】

数据结构:存储的数据的组织特点。

线性表,链表,树。。。。

栈:Stack,这种数据结构的特点?

last In First Out,简称LIFO,后进先出。

队列:queue,

First in First out,简称FIFO,先进先出。

【扩展知识2】

Vector:向量

对比ArrayList,LinkedList,Vector实现类

A:ArrayList,底层采用数组结构的实现的。(内存中连续空间)。jdk1.2
	只实现了List接口,功能都是List接口中规定的。
	优缺点:
		优点:遍历访问元素,效率很高
		缺点:插入或删除元素,效率相对低。
B:LinkedList,底层采用双向链表结构实现的。(元素在内存中不挨着,元素之间的指向)。jdk1.2
	实现了List接口的同时,还实现了Deque接口,所以有这两个接口中的功能。
	优缺点:
		优点:插入或删除元素,效率很高。
		缺点:遍历访问元素,效率相对低。
注意点:
	如果一个集合,频繁的添加或删除元素,建议选择LinkedList。
	如果一个集合,绝大多数的操作就是遍历查询,建议选择ArrayList。
	如果要模拟栈,队列等结构,建议选择LinkedList。
	
C:Vector,是ArrayList的前身。也是数组的结构。古老的类。从jdk1.0的版本就有了。
	线程安全,效率低,后来被ArrayList替代了。
	ArrayList和LinkedList都是线程不安全的,效率高。Collections工具类,可以获取线程安全的集合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值