LinkedList = Linked + List = 链表 + 列表 =链表列表
LinkedList的底层是 双向链表结构,由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在在任意位置插入或者删除元素时,不需要搬移元素,效率比较高
:
:
语法 | 解释 |
---|---|
add(E o) | 将指定元素追加到此列表的结尾 |
add(int index, E element) | 在此列表中指定的位置插入指定的元素 |
addFirst(E o) | 将给定元素插入此列表的开头 |
addLast(E o) | 将给定元素追加到此列表的结尾 |
remove(),poll() | 找到并移除此列表的第一个元素 |
remove(int index) | 移除此列表中指定位置处的元素 |
remove(int index) | 移除此列表中指定位置处的元素 |
remove(Object o) | 移除此列表中首次出现的指定元素 |
get(int index) | 返回此列表中指定位置处的元素 |
getFirst() | 返回此列表的第一个元素 |
getLast() | 返回此列表的最后一个元素 |
set(int index, E element) | 将此列表中指定位置的元素替换为指定的元素 |
peek() | 找到但不移除此列表的头(第一个元素) |
poll() | 找到并移除此列表的头(第一个元素 |
contains(Object o) | 如果此列表包含指定元素,则返回 true |
// 构造一个空的LinkedList
List<Integer> list1 = new LinkedList<>();
List<String> list2 = new java.util.ArrayList<>();
list2.add("JavaSE");
list2.add("JavaWeb");
list2.add("JavaEE");
// 使用ArrayList构造LinkedList
List<String> list3 = new LinkedList<>(list2)
:
LinkedList<String> list = new LinkedList<>();
list.add("javaSE");
list.add("javaWeb");
list.add("javaEE");
// foreach遍历
for (String x: list) {
System.out.print(x + " ");
}
:
// 使用迭代器遍历---正向遍历
ListIterator<String> list1 = list.listIterator();
while (list1.hasNext()){
System.out.print(list1.next()+" ");
}
// 使用反向迭代器---反向遍历
ListIterator<String> lis2 = list.listIterator(list.size());
while (lis2.hasPrevious()){
System.out.print(lis2.previous()+" ");
}
:
LinkedList<String> list = new LinkedList<>();
list.add("javaSE");
list.add("javaWeb");
list.add("javaEE");
//Lambdar 表达式
list.forEach(lisr-> System.out.println(lisr));
:
ArrayList实质是顺序表,底层是一个数组。LinkedList实质是一个链表。
他们都具有增删查改的功能,但是在实现方式上有区别。比如在插入元素的时候,ArrayList往0位置上插入一个元素,就需把整个数组整体往后移动,时间复杂度为O(N)。而LinkedList只需要修改指向就可以了,时间复杂度为O(1)。但是ArrayList可以支持随机访问,时间复杂度为O(1),所以一般情况下ArrayList顺序表适合频繁根据下标位置访问,LinkedList比较适合插入和删除比较频繁的情况。
从存储上来说,ArrayList顺序表在物理上和逻辑上都是连续的,但是在扩容的时候,可能会造成空间的浪费。而LinkedList在物理上不一定是连续的,在逻辑上是连续的,可以做到随用随取。
不同点 | ArrayList | LinkedList |
---|---|---|
存储空间上 | 物理上逻辑上一定连续 | 逻辑上连续,但物理上不一定连续 |
\随机访问 | 支持O(1) | 不支持:O(N) |
头插 | 需要搬移元素,效率低O(N) | 只需修改引用的指向,时间复杂度为O(1) |
插入 | 空间不够时需要扩容 | 没有容量的概念 |
应用场景 | 元素高效存储+频繁访问 | 任意位置插入和删除频繁 |
:
OK,以上就是关于LinkedList的全部内容啦,博主会持续更新,欢迎评论区指正❤️❤️❤️