Java LinkedList示例
Java中的LinkedList类使用双链表来存储元素,它还提供了一个链表数据结构。它实现了List,就像ArrayList类和Deque接口一样。与数组一样,链表是一种线性数据结构,但与数组不同,链表中的元素是用指针链接在一起的。有一个指针指向第一个元素,通常称为“Head”。最后一个元素指向空元素。此空元素表示链接列表中不再有元素。
了解Java中的LinkedList有什么重要的
Java中的LinkedList类允许重复的元素。
Java中的LinkedList类维护插入顺序。
Java中的LinkedList类是非同步的。
Java中的LinkedList类允许快速操作,因为不需要转换。
Java中的LinkedList类可以是列表、堆栈甚至队列。
LinkedList的局限性
LinkedList类需要比数组更多的内存,因为它们的指针使用存储。
因为我们不能仅仅通过索引访问每个元素,所以链表中的元素很难遍历。
LinkedList的简单说明
Java中的LinkedList
这里是我上面提到的指针,指向第一个元素的指针。第一个元素(以及链表中的每个元素)基本上有两个东西-数据和下一个。数据只是指定元素包含的内容,next是指向next元素的指针。最后,我们可以在图中看到D指向NULL,在链表中,NULL表示列表的结束。
LinkedList中的构造函数
LinkedList():用于构造空列表。
LinkedList(集合<?extends E>c):它用于构造一个包含指定集合的元素的列表,这些元素按集合的迭代器返回的顺序排列。
LinkedList中的方法
boolean add(E E):将指定的元素添加到列表的末尾。
void add(int index,E element):将指定元素添加到指定位置。
void clear():删除列表中的所有元素。
Object clone:返回ArrayList的浅副本。
boolean contains(Object o) 如果指定的元素在列表中,返回true。
Iterator<E>descendingIterator():以相反的顺序返回deque中元素的迭代器。
E element():从列表中检索第一个元素。
E get(int index):返回列表中指定位置的元素。
int indexOf(Object o)返回指定元素在列表中第一次出现的索引;如果元素不存在,返回-1.
boolean offer(E E):将指定元素添加为列表的最后一个元素。
E pop():从列表表示的堆栈中弹出元素。
voidpush(E E):将元素推送到由列表表示的堆栈上。
E remove():用于检索和删除列表的第一个元素。
E remove(int index):删除列表中指定位置的元素。
int size(): 返回列表中元素的个数。
有关所有方法的文档,可以访问Oracle官方文档页。
使用add()向LinkedList添加元素
语法: boolean add(E e)
import java.io.*; import java.util.LinkedList; public class LinkedListExample { public static void main(String args[]) { LinkedList animals = new LinkedList(); animals.add("Elephant"); animals.add("Tiger"); System.out.println("The list is:" + animals); list.add("Lion"); //printing the new list System.out.println("The new List is:" + animals); } }
输出
The list is:[Elephant, Tiger] The new List is:[Elephant, Tiger, Lion]
使用push()将元素推送到LinkedList
语法: LinkedListObject.push(E e)
import java.util.LinkedList; public class PushExample { //Main method public static void main(String[] args) { LinkedList<String> animals = new LinkedList<>(); animals.push("Elephant"); animals.push("Tiger"); animals.push("Lion"); //Printing the complete stack. System.out.println(animals); } }
输出
[Lion, Tiger, Elephant]
使用pop()从LinkedList弹出元素
语法:LinkedListObject.pop()
import java.io.*; import java.util.LinkedList; public class LinkedListExample { public static void main(String args[]) { LinkedList animals = new LinkedList(); /Pushing an element in the stack animals.push("Elephant"); //Pushing an element in the stack animals.push("Tiger"); //Pop an element from stack String s = animals.pop(); System.out.println(s); //Pushing an element in the stack animals.push("Lion"); //Printing the complete stack. System.out.println(animals); } }
输出
Elephant [Elephant, Lion]
使用DeLinkedList移除元素
语法:LinkedList.remove()
import java.io.*; import java.util.LinkedList; public class LinkedListExample { public static void main(String args[]) { LinkedList<String> animals = new LinkedList<String>(); animals.add("Elephant"); animals.add("Tiger"); animals.add("Lion"); System.out.println("LinkedList:" + animals); //Remove the head using remove() animals.remove(); //Print the final list System.out.println("Final LinkedList:" + animals); } }
输出
LinkedList:[Elephant, Tiger, Lion] Final LinkedList:[Tiger, Lion]
使用clear()清除链表
import java.io.*; import java.util.LinkedList; public class LinkedListExample { public static void main(String args[]) { LinkedList<String> animals = new LinkedList<String>(); animals.add("Elephant"); animals.add("Tiger"); animals.add("Lion"); System.out.println("Before clear:" + animals); animals.clear(); System.out.println("After clear: " + animals); //Adding elements after clearing the list animals.add("Elephant"); animals.add("Tiger"); animals.add("Lion"); System.out.println("After adding elements to empty list:" + animals); } }
输出
Before clear:[Elephant, Tiger, Lion] After clear: [] After adding elements to empty list:[Elephant, Tiger, Lion]
使用contains()检查LinkedList中是否存在元素
语法:LinkedList.contains(Object element)
import java.io.*; import java.util.LinkedList; public class LinkedListExample { public static void main(String args[]) { LinkedList<String> animals = new LinkedList<String>(); animals.add("Elephant"); animals.add("Tiger"); animals.add("Lion"); System.out.println("\nIs 'Lion' in the linkedlist: " + animals.contains("Lion")); System.out.println("Is'Cat' in the linkedlist: " + animals.contains("Cat")); } }
**输出
**
Is 'Lion' in the linkedlist: true Is 'Cat' in the linkedlist: false
使用size()获取LinkedList的大小
语法:LinkedList.size()
import java.io.*; import java.util.LinkedList; public class LinkedListExample { public static void main(String args[]) { LinkedList<String> animals = new LinkedList<String>(); animals.add("Elephant"); animals.add("Tiger"); animals.add("Lion"); System.out.println("The size of the linked list is: " + animals.size()); } }
输出
The size of the linked list is: 3
如何循环链表
有5种方法:
For循环
增强型For循环
While循环
迭代器
集合的stream()util(Java 8)
For循环
LinkedList<String> linkedList = new LinkedList<>(); for (int i = 0; i < linkedList.size(); i++) { System.out.println(linkedList.get(i)); }
增强型for-loop
for (String temp : linkedList) { System.out.println(temp); }
While循环
int i = 0; while (i < linkedList.size()) { System.out.println(linkedList.get(i)); i++; }
迭代器
Iterator<String> iterator = linkedList.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); }
collection stream()util(Java 8)
linkedList.forEach((temp) -> { System.out.println(temp); });