目录
public LinkedList(Collection c)
public void addFirst(E e):在把元素添加在链表头
public void addLast(E e):添加在链表结尾
public void clear():将数据全部置空,size=0
public Object clone() :克隆出一个全新的链表,对克隆的链表修改,不会影响原来的链表
public boolean contains(Object o):对象包含
public Iterator descendingIterator():链表反序迭代
public int indexOf(Object o):元素在链表中第一次出现的位置
public int lastIndexOf(Object o):元素在链表中最后一次出现的位置
public ListIterator listIterator(int index):迭代的时候,能对链表就行修改
offer、offerLast、offerLast,将制定的元素加载到链表尾,链表尾,链表头
public E peek(),peekFirst(),peekLast():找链表首节点,首节点,尾节点
public E pollFirst();找到首节点,并删除首节点
public E pollLast()找到尾节点,并删除尾节点
public boolean removeLastOccurrence(Object o):移除最后出现的
Object[] toArray():返回Object[] toArray(),无法强转
public T[] toArray(T[] a) :转换数据到指定数组
LinkedList底层是双向链表
private static class Node<E> {
E item;//当前元素
Node<E> next;下一个元素
Node<E> prev;上一个元素
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
变量
| 链表首节点 |
| 链表尾节点 |
| 链表存储数据量 |
构造方法
public LinkedList()
不做任何处理
public LinkedList(Collection<? extends E> c)
通过list构造
public class Test {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(2);
List<Integer> linkedList = new LinkedList<>(list);
System.out.println(linkedList);
}
}
通过LinkedList构造
public class Test {
public static void main(String[] args) {
List<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(2);
List<Integer> linkedList = new LinkedList<>(list);
System.out.println(linkedList);
}
}
常用方法,不讨论最简单的add和remove
跑一遍之后,发现好多方法是重复的
public void addFirst(E e):在把元素添加在链表头
一定要使用完成类声明LinkedList<Integer> linkedList = new LinkedList<>(list);,使用LinkedList<Integer> linkedList = new LinkedList<>(list);声明无法使用AddFirst()
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(2);
list.addFirst(6);
System.out.println(list);
}
}
结果:
[6, 1, 3, 4, 2]
public void addLast(E e):添加在链表结尾
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(2);
list.addLast(6);
System.out.println(list);
}
}
结果:
[1, 3, 4, 2, 6]
public void clear():将数据全部置空,size=0
public Object clone() :克隆出一个全新的链表,对克隆的链表修改,不会影响原来的链表
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(2);
LinkedList<Integer> clone = (LinkedList<Integer>)list.clone();
clone.remove(1);
System.out.println(list);
System.out.println(clone);
}
}
结果:
[1, 3, 4, 2]
[1, 4, 2]
public boolean contains(Object o):对象包含
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(2);
System.out.println(list.contains(1));
System.out.println(list.contains(0));
}
}
结果:
true
false
public Iterator<E> descendingIterator():链表反序迭代
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(2);
Iterator<Integer> integerIterator = list.descendingIterator();
while(integerIterator.hasNext()){
System.out.println(integerIterator.next());
}
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
结果:
2
4
3
1
1
3
4
2
public E element():获取首节点的元素
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(2);
System.out.println(list.element());
}
}
结果:首节点是1,所以输入1
1
public E getFirst():获取首节点的值
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(2);
System.out.println(list.getFirst());
}
}
结果:首节点是1,输入1
1
public E getLast():获取尾结点
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(2);
System.out.println(list.getLast());
}
}
结果:尾结点是2,输出2
2
public int indexOf(Object o):元素在链表中第一次出现的位置
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(2);
System.out.println(list.indexOf(3));
}
}
结果:下标从0开始,没有返回-1
1
public int lastIndexOf(Object o):元素在链表中最后一次出现的位置
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(3);
System.out.println(list.indexOf(5));
System.out.println(list.lastIndexOf(3));
}
}
结果:
-1
3
public ListIterator<E> listIterator(int index):迭代的时候,能对链表就行修改
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(3);
ListIterator<Integer> integerListIterator = list.listIterator();
while(integerListIterator.hasNext()){
System.out.println(integerListIterator.next());
integerListIterator.set(8);
integerListIterator.add(6);
}
System.out.println(list);
}
}
结果:
1
3
4
3
[8, 6, 8, 6, 8, 6, 8, 6]
offer、offerLast、offerLast,将制定的元素加载到链表尾,链表尾,链表头
public E peek(),peekFirst(),peekLast():找链表首节点,首节点,尾节点
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(3);
System.out.println(list.peek());
System.out.println(list.peekFirst());
System.out.println(list.peekLast());
System.out.println(list);
}
}
结果:
1
1
3
[1, 3, 4, 3]
public E poll();找到首节点,并删除
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(3);
System.out.println(list.poll());
System.out.println(list);
}
}
结果:
1
[3, 4, 3]
public E pollFirst();找到首节点,并删除首节点
public E pollLast()找到尾节点,并删除尾节点
public E pop():获取首节点,并删除首节点
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(3);
System.out.println(list.pop());
System.out.println(list.pop());
System.out.println(list.pop());
System.out.println(list.pop());
System.out.println(list);
}
}
结果:
1
3
4
3
[]
public void push(E e):加入首节点
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(3);
list.push(6);
list.push(7);
list.push(8);
System.out.println(list);
}
}
结果
[8, 7, 6, 1, 3, 4, 3]
public boolean removeFirstOccurrence(Object o):移除第一个出现的元素
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(3);
list.removeFirstOccurrence(3);
System.out.println(list);
}
}
结果
[1, 4, 3]
public boolean removeLastOccurrence(Object o):移除最后出现的
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(3);
list.removeLastOccurrence(3);
System.out.println(list);
}
}
结果:
[1, 3, 4]
Object[] toArray():返回Object[] toArray(),无法强转
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(3);
Object[] objects = list.toArray();
System.out.println(objects[0]);
System.out.println(objects[1]);
System.out.println(objects[2]);
System.out.println(objects[3]);
}
}
结果
1
3
4
3
public <T> T[] toArray(T[] a) :转换数据到指定数组
public class Test {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(3);
Integer[] array = new Integer[list.size()];
list.toArray(array);
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println(array[3]);
}
}
结果
1
3
4
3