从零开始学Java之List集合有哪些特性?—— LinkedList集合
简介
LinkedList采用链表结构来保存数据,所以是一种链表集合,类似于ArrayList,也是List的一个子类,位于java.util包中。它的底层是基于线性链表这种常见的数据结构,但并没有按线性的顺序存储数据,而是在每个节点中都存储了下一个节点的地址。
LinkedList的优点是便于向集合中插入或删除元素,尤其是需要频繁地向集合中插入和删除元素时,使用LinkedList类比ArrayList的效率更高。但LinkedList随机访问元素的速度则相对较慢,即检索集合中特定索引位置上的元素速度较慢。
2. LinkedList类关系
LinkedList直接继承自AbstractSequentialList,并实现了List、Deque、Cloneable、Serializable等多个接口。通过实现List接口,具备了列表操作的能力;通过实现Cloneable接口,具备了克隆的能力;通过实现Queue和Deque接口,可以作为队列使用;通过实现Serializable接口,可以具备序列化能力。LinkedList类结构关系如下图所示:
3. LinkedList与ArrayList对比
与ArrayList相比,LinkedList进行添加和删除的操作效率更高,但查找和修改的操作效率较低。基于这种特性,我们可以在以下情况中使用ArrayList:
● 需要经常访问获取列表中的某个元素;
● 只需要在列表的末尾进行添加和删除某个元素。
当遇到如下情况时,可以考虑使用LinkedList:
● 需要经常通过循环迭代来访问列表中的某些元素;
● 需要经常在列表的开头、中间、末尾等位置进行元素的添加和删除操作。
4. 常用方法
LinkedList中的很多方法其实都来自于List接口,所以它的很多方法与ArrayList是一样的。但由于其自身特点,也具有一些特有的常用方法,这里壹哥只列出LinkedList特有的常用方法,如下表所示:
对这些方法进行基本的了解之后,接下来我们选择几个核心方法来来看看具体该怎么使用。
5. 添加/删除元素
我们可以通过addFirst()和addLast()方法,分别在链表的开头和结尾添加一个元素。当我们要频繁地在一个列表的开头和结尾进行元素添加、删除时,使用LinkedList要比ArrayList的效率更高。
import java.util.LinkedList;
/**
* @author 一一哥Sun
*/
public class Demo09 {
public static void main(String[] args) {
// 创建LinkedList集合
LinkedList<String> names = new LinkedList<String>();
// 一个一个地添加元素
names.add("一一哥");
names.add("java");
names.add("数学");
//在链表的开头添加元素
names.addFirst("壹壹哥");
//在链表的结尾添加元素
names.addLast("历史");
// 遍历集合
for (String name : names) {
System.out.println("name=" + name);
}
//移除链表开头的元素
names.removeFirst();
//移除链表结尾的元素
names.removeLast();
}
}
迭代获取元素
我们可以通过getFirst()、getLast()等方法获取到集合中的第一个、最后一个元素。
import java.util.LinkedList;
/**
* @author 一一哥Sun
*/
public class Demo10 {
public static void main(String[] args) {
// 创建LinkedList集合
LinkedList<String> names = new LinkedList<String>();
// 一个一个地添加元素
names.add("一一哥");
names.add("java");
names.add("数学");
System.out.println("first=" + names.getFirst());
System.out.println("last=" + names.getLast());
// 迭代遍历集合
for (String name : names) {
System.out.println("name=" + name);
}
}
}
猜你喜欢LIKE
相关推荐HOT
更多>>servlet底层原理是什么?
1、ServletAPI核心类与接口2、Servlet类处理请求的流程创建servlet类的步骤:创建一个命名为TestServlet继承javax.servlet.http.HttpServlet类详情>>
2023-05-30 10:41:22多线程的优势与劣势分别是什么?
多线程是指在同一个程序中,同时运行多个线程,每个线程都可以独立执行不同的任务,相互之间不会干扰。多线程的优势和劣势如下:优势:提高程序...详情>>
2023-05-30 10:32:12设计模式之生产者与消费者的代码实现
本文主要讲述生产者和消费者模式,文中会使用通俗易懂的案例,使你更好地学习本章知识点并理解原理,做到有道无术。什么是生产者和消费者模式生...详情>>
2023-05-30 10:25:46从零开始学Java之interface接口
一.接口简介简介Java中的接口(interface)类似于是一种特殊的抽象类,它也是众多抽象方法的集合。接口的定义方式、组成部分都与抽象类相似,却比...详情>>
2023-05-29 11:26:17热门推荐
如何进行mysql数据备份?
沸什么是servlet的生命周期?servlet请求处理流程是怎样的?
热servlet底层原理是什么?
热怎样编写java程序?
新多线程的优势与劣势分别是什么?
ssm框架的作用与原理是什么?
设计模式之生产者与消费者的代码实现
接口和抽象类有什么区别?4个方面对比
从零开始学Java之interface接口
从零开始学Java之Java中的内部类是怎么回事?
一分钟带你了解MySQL——基础与介绍
在java中,super关键字怎样使用
什么是事件流以及事件流的传播机制 ?
弹性盒有哪些属性是在父元素身上?