零基础学Java第十九天之LinkedList集合

LinkedList集合

1、理解

是一个双向链表(doubly-linked list),与ArrayList的实现方式(基于动态数组)不同。双向链表允许在列表的任意位置进行快速的插入和删除操作,只需要更改相关节点的指针即可,而不需要像ArrayList那样可能需要移动大量的元素。

2、特点

  1. 提供了向列表的开头和结尾插入、删除元素的方法(例如,addFirst(), addLast(), removeFirst(), removeLast()等)。
  2. 提供了在列表的指定位置插入和删除元素的方法(例如,add(int index, E element)remove(int index))。
  3. 提供了查看列表开头和结尾元素但不移除它们的方法(例如,peek(), peekFirst(), peekLast())。
  4. 由于LinkedList实现了Deque接口,所以它也可以作为双端队列(double-ended queue)使用。

3、使用

1. 添加元素

  • add(E e):在列表的末尾添加元素。
  • add(int index, E element):在指定索引处添加元素。
  • addFirst(E e)addLast(E e):在列表的头部或尾部添加元素。

2. 删除元素

remove(int index):删除指定索引处的元素。

remove(Object o):删除列表中第一个出现的指定元素。

removeFirst()removeLast():删除并返回列表的头部或尾部的元素。

3. 获取元素

get(int index):返回指定索引处的元素。

getFirst()getLast():返回但不删除列表的头部或尾部的元素。

4. 检查元素

contains(Object o):检查列表中是否包含指定元素。

5、其他操作

  • size():返回列表中的元素数量。
  • isEmpty():检查列表是否为空。
  • clear():删除列表中的所有元素。
  • iterator():返回列表的迭代器,用于遍历列表。
  • listIterator():返回列表的列表迭代器(ListIterator),可以向前和向后遍历列表。

6、将集合转换为数组

//将集合转换为数组

Object[] array1 = subList.toArray();

System.out.println(Arrays.toString(array1));//[xxx, yyy, yyy]
//将集合转换为指定类型的数组

String[] array2 = new String[3];

subList.toArray(array2);

System.out.println(Arrays.toString(array2));//[xxx, yyy, yyy]

7、遍历集合

java 复制代码
//遍历集合 -- for循环	
for (int i = 0; i < list.size(); i++) {
		System.out.println(list.get(i));
	}
java 复制代码
//遍历集合 -- foreach
	for (String element : list) {
		System.out.println(element);
	}
java 复制代码
//遍历集合 -- Iterator
	Iterator<String> it = list.iterator();
	while(it.hasNext()){//判断是否有可迭代的元素
		String next = it.next();//获取下一个元素
		System.out.println(next);
	}
java 复制代码
	//遍历集合 -- ListIterator
	ListIterator<String> listIterator = list.listIterator();
	while(listIterator.hasNext()){//判断是否有可迭代的元素
		String next = listIterator.next();//获取下一个元素
		System.out.println(next);
	}

8、LinkedList独有的方法

LinkedList list = new LinkedList<>();

1、添加到头部

​ list.addFirst("aaa");

​ list.offerFirst("bbb");

​ list.push("ccc");

2、添加到末尾

list.addLast("xxx");

list.offer("yyy");

list.offerLast("zzz");

3、获取第一个元素

System.out.println("获取第一个元素:" + list.element());

System.out.println("获取第一个元素:" + list.getFirst());

System.out.println("获取第一个元素:" + list.peek());

System.out.println("获取第一个元素:" + list.peekFirst());

System.out.println("获取第一个元素:" + list.pop());

4、获取最后一个元素

System.out.println("获取最后一个元素:" + list.getLast());

System.out.println("获取最后一个元素:" + list.peekLast());

5、删除第一个元素

list.poll();

list.pollFirst();

list.removeFirst();

6、删除最后一个元素

list.pollLast();

list.removeLast();

7、删除第一次出现的元素

list.removeFirstOccurrence("abc");

8、删除最后一次出现的元素

list.removeLastOccurrence("abc");

9、倒序遍历

Iterator descendingIterator =list.descendingIterator();

while(descendingIterator.hasNext()){

String next = descendingIterator.next();

System.out.println(next);

}

for (String element : list) {

​ System.out.println(element);

​ }

4、LikedList实现队列模式 - 先进先出

java 复制代码
package com.qf.linkedlist_class;

import java.util.LinkedList;

public class Test03 {
	/**
	 * 知识点:LikedList实现队列模式
	 * 
	 * 注意:队列模式 - 先进先出
	 */
	public static void main(String[] args) {
		
		LinkedList<String> list = new LinkedList<>();
		
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		list.add("ddd");
		list.add("eee");
		
		while(!list.isEmpty()){
			//String element = list.pollFirst();
			String element = list.removeFirst();
			System.out.println(element);
		}
		
		System.out.println("集合的元素个数为:" + list.size());//0
	}
}

5、栈模式 - 先进后出/后进先出

java 复制代码
package com.qf.linkedlist_class;

import java.util.LinkedList;

public class Test04 {
	/**
	 * 知识点:LikedList实现队列模式
	 * 
	 * 注意:栈模式 - 先进后出/后进先出
	 */
	public static void main(String[] args) {
		
		LinkedList<String> list = new LinkedList<>();
		
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		list.add("ddd");
		list.add("eee");
		
		while(!list.isEmpty()){
			String element = list.removeLast();
			System.out.println(element);
		}
		
		System.out.println("集合的元素个数为:" + list.size());//0
	}
}
相关推荐
奶香臭豆腐2 分钟前
C++ —— 模板类具体化
开发语言·c++·学习
晚夜微雨问海棠呀10 分钟前
长沙景区数据分析项目实现
开发语言·python·信息可视化
graceyun10 分钟前
C语言初阶习题【9】数9的个数
c语言·开发语言
hanbarger12 分钟前
mybatis框架——缓存,分页
java·spring·mybatis
cdut_suye20 分钟前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
苹果醋332 分钟前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx
小蜗牛慢慢爬行33 分钟前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
azhou的代码园36 分钟前
基于JAVA+SpringBoot+Vue的制造装备物联及生产管理ERP系统
java·spring boot·制造
波音彬要多做44 分钟前
41 stack类与queue类
开发语言·数据结构·c++·学习·算法
Swift社区1 小时前
Excel 列名称转换问题 Swift 解答
开发语言·excel·swift