介绍:
LinkedList是由节点组成的线性数据结构。 在单链列表中,每个节点包含数据和引用。 在此,参考部分引用链表中的下一个节点。
另一方面,在双链表中,我们具有指向上一个和下一个节点的数据和引用。 Java提供了LinkedList实现– java.util.LinkedList <T>,该实现与双向链表一起使用。 此类从AbstractList类继承,并实现List <T>和Deque <T>接口。 在本快速教程中,我们将学习如何使用Java中的LinkedList类。
构造一个
我们可以通过以下方式之一实例化Java中的链表:
Java
LinkedList<Integer> intList = new LinkedList<>();LinkedList<Integer> intList1 = new LinkedList<>(intList);
即此类提供了两个构造函数:
- LinkedList():创建一个空的链表
- LinkedList(Collection c):创建一个链表,并以c的内容为其元素对其进行初始化
添加元素:
要将元素添加到LinkedList ,我们可以使用List <T>接口中add()方法的风格。 我们还可以使用addFirst()或addLast()将元素分别添加到开头或结尾。
Java
intList.add(1); // [1]
intList.addFirst(2); // [2, 1]
intList.addLast(3); // [2, 1, 3]
删除元素:
同样,要删除项目,我们可以从List接口使用remove(index),remove(obj)方法。 否则,我们也可以选择removeFirst()或removeLast()方法:
Java
int firstElement = intList.removeFirst();
int lastElement = intList.removeLast();
这些方法既删除又返回删除的值。
Java LinkedList类还提供removeFirstOccurrence(Object obj)和removeLastOccurrence(Object obj)方法,以分别删除给定值的第一次出现和最后一次出现。 如果列表中不存在此类值,则这些方法将返回false 。
boolean removed = intList.removeFirstOccurrence(1);
查询元素:
LinkedList类中有getFirst()和getLast()方法,用于查询链接列表的第一个或最后一个元素:
Java
int firstElement = intList.getFirst();
int lastElement = intList.getLast();
由于这是一个双向链接的列表实现,因此getFirst()和getLast()都是恒定时间操作。
如果我们知道要检索的元素的索引,则还可以使用List接口的get(int index)方法:
Java
int elementAtIndex1 = intList.get(1);
遍历
就像其他任何形式的列表一样,我们将遍历链接列表:
Java
//Using a for loop
for(int num : intList) {System.out.println(num);
}//Using iterator
ListIterator itr = intList.listIterator();
while(itr.hasNext()) {System.out.println(itr.next());
}//Using forEach construct
intList.forEach( value -> System.out.println(value); );
让我们概述一下Java LinkedList和ArrayList类之间的区别:
链表 | 数组列表 |
---|---|
使用双向链接列表表示 | 使用动态数组的概念 |
实现两个列表 和德克 介面 | 只实施清单 接口 |
不适合随机访问 | 非常适合随机访问。 如果我们知道索引,则只需要O(1)时间即可检索 |
在Java链表的开头和结尾处进行O(1)插入/删除 | 将元素插入ArrayList可能会导致调整后备数组的大小,因此摊销成本为O(n)。 同样,在ArrayList的开头插入将需要我们将所有元素向右移动一个位置。 |
存储对上一个和下一个节点的引用的内存开销 | 无需存储其他信息 |
随意在本文中了解有关ArrayList的更多信息。 Java LinkedList中还提供了从List <T>接口继承的ArrayList类中的所有方法。
结论:
在本快速教程中,我们探讨了Java LinkedList类的一些最受欢迎的方法。 我们还介绍了Java ArrayList和LinkedList之间的区别。
成为第一个发表评论的人。
翻译自: https://www.javacodegeeks.com/2019/03/linkedlist-java.html