LinkedList集合
1、理解
是一个双向链表(doubly-linked list),与ArrayList的实现方式(基于动态数组)不同。双向链表允许在列表的任意位置进行快速的插入和删除操作,只需要更改相关节点的指针即可,而不需要像ArrayList那样可能需要移动大量的元素。
2、特点
- 提供了向列表的开头和结尾插入、删除元素的方法(例如,
addFirst()
,addLast()
,removeFirst()
,removeLast()
等)。- 提供了在列表的指定位置插入和删除元素的方法(例如,
add(int index, E element)
,remove(int index)
)。- 提供了查看列表开头和结尾元素但不移除它们的方法(例如,
peek()
,peekFirst()
,peekLast()
)。- 由于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
}
}