LinkedList
双链表实现了List和Deque接口。 实现所有可选列表操作,并允许所有元素(包括null )。
底层是链表,所以增删快,查找慢。此实现不同步。
构造方法
LinkedList()
构造一个空列表。
LinkedList(Collection<? extends E> c)
构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
/*
LinkedList()
构造一个空列表。
*/
LinkedList list1 = new LinkedList();
/*
LinkedList(Collection<? extends E> c)
构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。
*/
//先创建一个集合
Collection<Integer> list2 = new ArrayList<>();
//往集合中添加元素
list2.add(2);
list2.add(5);
//使用第二种构造方法,输出集合
LinkedList list3 = new LinkedList(list2);
System.out.println(list2);
}
}
运行结果:
主要方法
和ArrayList相比,LinkedList有更多的对集合头元素和尾元素的增删。
1 | 2 |
---|---|
boolean add(E e) | 将指定的元素追加到此列表的末尾。 |
void add(int index, E element) | 在此列表中的指定位置插入指定的元素。 |
boolean addAll(Collection<? extends E> c) | 按照指定集合的迭代器返回的顺序将指定集合中的所有元素追加到此列表的末尾。 |
boolean addAll(int index, Collection<? extends E> c) | 将指定集合中的所有元素插入到此列表中,从指定的位置开始。 |
void addFirst(E e) | 在该列表开头插入指定的元素。 |
void addLast(E e) | 将指定的元素追加到此列表的末尾。 |
void clear() | 从列表中删除所有元素。 |
Object clone() | 返回此 LinkedList的浅版本。 |
boolean contains(Object o) | 如果此列表包含指定的元素,则返回 true 。 |
Iterator descendingIterator() | 以相反的顺序返回此deque中的元素的迭代器。 |
E element() | 检索但不删除此列表的头(第一个元素)。 |
E get(int index) | 返回此列表中指定位置的元素。 |
E getFirst() | 返回此列表中的第一个元素。 |
E getLast() | 返回此列表中的最后一个元素。 |
int indexOf(Object o) | 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。 |
int lastIndexOf(Object o) | 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。 |
ListIterator listIterator(int index) | 从列表中的指定位置开始,返回此列表中元素的列表迭代器(按适当的顺序)。 |
boolean offer(E e) | 将指定的元素添加为此列表的尾部(最后一个元素)。 |
boolean offerFirst(E e) | 在此列表的前面插入指定的元素。 |
boolean offerLast(E e) | 在该列表的末尾插入指定的元素。 |
E peek() | 检索但不删除此列表的头(第一个元素)。 |
E peekFirst() | 检索但不删除此列表的第一个元素,如果此列表为空,则返回 null 。 |
E peekLast() | 检索但不删除此列表的最后一个元素,如果此列表为空,则返回 null 。 |
E poll() | 检索并删除此列表的头(第一个元素)。 |
E pollFirst() | 检索并删除此列表的第一个元素,如果此列表为空,则返回 null 。 |
E pollLast() | 检索并删除此列表的最后一个元素,如果此列表为空,则返回 null 。 |
E pop() | 从此列表表示的堆栈中弹出一个元素。 |
void push(E e) | 将元素推送到由此列表表示的堆栈上。 |
E remove() | 检索并删除此列表的头(第一个元素)。 |
E remove(int index) | 删除该列表中指定位置的元素。 |
boolean remove(Object o) | 从列表中删除指定元素的第一个出现(如果存在)。 |
E removeFirst() | 从此列表中删除并返回第一个元素。 |
boolean removeFirstOccurrence(Object o) | 删除此列表中指定元素的第一个出现(从头到尾遍历列表时)。 |
E removeLast() | 从此列表中删除并返回最后一个元素。 |
boolean removeLastOccurrence(Object o) | 删除此列表中指定元素的最后一次出现(从头到尾遍历列表时)。 |
E set(int index, E element) | 用指定的元素替换此列表中指定位置的元素。 |
int size() | 返回此列表中的元素数。 |
Spliterator spliterator() | 在此列表中的元素上创建late-binding和故障快速 Spliterator 。 |
Object[] toArray() | 以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。 |
T[] toArray(T[] a) | 以正确的顺序返回一个包含此列表中所有元素的数组(从第一个到最后一个元素); 返回的数组的运行时类型是指定数组的运行时类型。 |
与ArrayList功能相同的方法
LinkedList中有很多和ArrayList功能相同的方法
import java.util.Collection;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
//创建一个集合
Collection<String> list = new LinkedList<>();
//boolean add(E e) 将指定的元素追加到此列表的末尾。
list.add("张三");
list.add("李四");
list.add("王五");
System.out.println(list);
//E remove(int index) 删除该列表中指定位置的元素。
list.remove("王五");
System.out.println(list);
//int size() 返回此列表中的元素数。
System.out.println(list.size());
//void clear() 从列表中删除所有元素。
list.clear();
}
}
运行结果:
大量的与首尾相关的方法
LinkedList中有很多关于首尾的增删的方法,这是由于LinkedList的底层是链表实现,所以对于链表的首尾元素容易访问。
import java.util.Collection;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
//创建一个集合
LinkedList<String> list = new LinkedList<>();
list.add("张三");
list.add("李四");
/*
void addFirst(E e) 在该列表开头插入指定的元素。
void addLast(E e) 将指定的元素追加到此列表的末尾。
*/
list.addFirst("王五"); //在开头插入“王五”
System.out.println(list); //[王五, 张三, 李四]
list.addLast("赵四"); //在末尾插入“赵四”
System.out.println(list); //[王五, 张三, 李四, 赵四]
/*
E getFirst() 返回此列表中的第一个元素。
E getLast() 返回此列表中的最后一个元素。
*/
//获取第一个元素
System.out.println(list.getFirst()); //王五
//获取最后一个元素
System.out.println(list.getLast()); //赵四
/*
E element() 检索但不删除此列表的头(第一个元素)。
*/
System.out.println(list.element());//王五
/*
E peek() 检索但不删除此列表的头(第一个元素)。
E peekFirst() 检索但不删除此列表的第一个元素,如果此列表为空,则返回 null 。
E peekLast() 检索但不删除此列表的最后一个元素,如果此列表为空,则返回 null 。
*/
System.out.println(list.peek()); //王五
System.out.println(list.peekFirst());//王五
System.out.println(list.peekLast());//赵四
/*
E removeFirst() 从此列表中删除并返回第一个元素。
E removeLast() 从此列表中删除并返回最后一个元素。
*/
System.out.println(list.removeFirst()); //删除并返回王五
System.out.println(list.removeLast()); //删除并返回赵四
/*
E poll() 检索并删除此列表的头(第一个元素)。
E pollFirst() 检索并删除此列表的第一个元素,如果此列表为空,则返回 null 。
E pollLast() 检索并删除此列表的最后一个元素,如果此列表为空,则返回 null 。
*/
System.out.println(list.poll()); //此时集合中只有[张三,李四],所以删除并返回张三
System.out.println(list.pollFirst()); //删除并返回李四
System.out.println(list.pollLast()); //此时集合中的所有元素都删除了,所以返回null
}
}
运行结果: