了解LinkedList

34 阅读4分钟

LinkedList

public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, Serializable

LinkedList 使用双向链表结构 增删快 查找慢 并允许所有元素(包括null )此类继承了 AbstractList, 所以是 List 的子类。 但是此类也是 Queue 接口的子类 也就是说拥有了一些队列的操作方法 Queue 接口定义了如下的方法:

No.方法名称类型描述
1public boolean add(E e)普通增加元素, 如果有容量限制, 并且已满, 则抛出异常
2public E element()普通取得, 但是不删除当前元素, 如果对列为空则抛出异常
3boolean offer(E e)普通添加, 如果有容量限制, 并且已满, 只是无法添加,但不抛出异常, 返回 false
4E peek()普通取得头元素, 但是不删除, 如果队列为空, 则返回null
5E poll()普通取得头元素, 但是删除, 如果队列为空, 则返回 null
6E remove()普通删除当前元素, 如果对列为空则抛出异常

常用方法

/**
 *  变量和类型 方法 描述
 * void add(int index, E element) 将指定元素插入此列表中的指定位置。
 * boolean add(E e) 将指定的元素追加到此列表的末尾。
 * boolean addAll(int index, Collection<? extends E> c) 从指定位置开始,将指定集合中的所有元素插入此列表。
 * boolean addAll(Collection<? extends E> c) 将指定集合中的所有元素按指定集合的迭代器返回的顺序附加到此列表的末尾。
 * void addFirst(E e) 在此列表的开头插入指定的元素。
 * void addLast(E e) 将指定的元素追加到此列表的末尾。
 * void clear() 从此列表中删除所有元素。
 * Object clone() 返回此 LinkedList的浅表副本。
 * boolean contains(Object o) 如果此列表包含指定的元素,则返回 true 。
 * Iterator<E> descendingIterator() 以相反的顺序返回此双端队列中元素的迭代器。
 * E element() 检索但不删除此列表的头部(第一个元素)。
 * E get(int index) 返回此列表中指定位置的元素。
 * E getFirst() 返回此列表中的第一个元素。
 * E getLast() 返回此列表中的最后一个元素。
 * int indexOf(Object o) 返回此列表中第一次出现的指定元素的索引,如果此列表不包含该元素,则返回-1。
 * int lastIndexOf(Object o) 返回此列表中指定元素最后一次出现的索引,如果此列表不包含该元素,则返回-1。
 * ListIterator<E> 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<E> spliterator() 在此列表中的元素上创建late-binding和故障快速 Spliterator 。
 * Object[] toArray() 以适当的顺序(从第一个元素到最后一个元素)返回包含此列表中所有元素的数组。
 * <T> T[] toArray(T[] a) 以适当的顺序返回包含此列表中所有元素的数组(从第一个元素到最后一个元素); 返回数组的运行时类型是指定数组的运行时类型。
 *
*/
方法的实现
public static void main(String[] args) {
    Queue<String> queue = new LinkedList<String>();
    queue.add("A");
    queue.add("B");
    queue.add("C");
    int len=queue.size();//把queue的大小先取出来, 否则每循环一次, 移除一个元素, 就少
    一个元素, 那么queue.size()在变小, 就不能循环queue.size()次了。
    for (int x = 0; x <len; x++) {
        System.out.println(queue.poll());
    }
    System.out.println(queue);
}
@Test
public void test1(){
    LinkedList<Integer> linkedList = new LinkedList<>();
    //可以模拟栈 使用 push() pop();
    linkedList.push(100);
    linkedList.push(200);
​
    Integer pop = linkedList.pop();
    System.out.println(pop);// 200
    Integer pop1 = linkedList.pop();
    System.out.println(pop1);// 100
}

参考 链接:juejin.cn/post/701400…