Java LinkedList

1 什么是Java LinkedList

Java LinkedList类使用双向链表来存储元素。它提供了一个链表数据结构。它继承了AbstractList类并实现List和Deque接口。

Java LinkedList的核心要点是:

  • Java LinkedList类可以存储重复的元素。
  • Java LinkedList类是有序的。
  • Java LinkedList类是非同步的(线程不安全的)。
  • 在Java LinkedList类中,由于不需要进行任何转换,因此处理速度很快。
  • Java LinkedList类可以用作List,Stack或Queue。

2 Java LinkedList的层次结构

如上图所示,Java LinkedList类继承了AbstractSequentialList类并实现了List和Deque接口。

3 双向链表

在双向链表的情况下,我们可以从两侧添加或删除元素。

4 Java LinkedList的语法

public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, Serializable  

5 Java LinkedList的构造方法

构造方法 描述
LinkedList() 用于构造一个空List。
LinkedList(Collection<? extends E> c) 用于构造一个包含指定集合元素的List,这些元素按顺序由集合的迭代器返回。

6 Java LinkedList的方法

方法 描述
boolean add(E e) 用于将指定的元素附加到List的末尾。
void add(int index, E element) 用于将指定的元素插入List中指定位置的索引处。
boolean addAll(Collection<? extends E> c) 用于将指定集合中的所有元素附加到此List的末尾,以指定集合的​​迭代器返回它们的顺序。
boolean addAll(int index, Collection<? extends E> c) 从List的指定位置开始,它用于附加指定集合中的所有元素。
void addFirst(E e) 用于将给定元素插入List的开头。
void addLast(E e) 用于将给定元素附加到List的末尾。
void clear() 用于从List中删除所有元素。
Object clone() 用于返回ArrayList的浅表副本。
boolean contains(Object o) 如果List包含指定的元素,则用于返回true。
Iterator<E> descendingIterator() 用于以相反的顺序在双端队列中返回元素上的迭代器。
E element() 用于检索List的第一个元素。
E get(int index) 用于返回List中指定位置的元素。
E getFirst() 用于返回List中的第一个元素。
E getLast() 用于返回List中的最后一个元素。
int indexOf(Object o) 用于返回指定元素首次出现的List中的索引;如果List不包含任何元素,则返回-1。
int lastIndexOf(Object o) 用于返回指定元素最后一次出现的List中的索引;如果List不包含任何元素,则返回-1。
ListIterator<E> listIterator(int index) 从List中的指定位置开始,它用于按正确顺序返回元素的List迭代器。
boolean offer(E e) 将指定的元素添加为List的最后一个元素。
boolean offerFirst(E e) 将指定的元素插入List的开头。
boolean offerLast(E e) 将指定的元素插入List的末尾。
E peek() 检索List的第一个元素
E peekFirst() 检索List的第一个元素;如果List为空,则返回null。
E peekLast() 检索List的最后一个元素;如果List为空,则返回null。
E poll() 检索并删除List的第一个元素。
E pollFirst() 检索并删除List的第一个元素,如果List为空,则返回null。
E pollLast() 检索并删除List的最后一个元素,如果List为空,则返回null。
E pop() 从List表示的堆栈中弹出一个元素。
void push(E e) 将元素压入List表示的堆栈。
E remove() 用于检索和删除List的第一个元素。
E remove(int index) 用于删除List中指定位置的元素。
boolean remove(Object o) 用于删除List中指定元素的首次出现。
E removeFirst() 从List中删除并返回第一个元素。
boolean removeFirstOccurrence(Object o) 用于删除List中指定元素的首次出现(当从头到尾遍历List时)。
E removeLast() 从List中删除并返回最后一个元素。
boolean removeLastOccurrence(Object o) 删除List中最后一次出现的指定元素(当从头到尾遍历List时)。
E set(int index, E element) 将List中指定位置的元素替换为指定元素。
Object[] toArray() 用于以正确的顺序(从第一个元素到最后一个元素)返回包含List中所有元素的数组。
<T> T[] toArray(T[] a) 返回一个数组,该数组包含按正确顺序排列的所有元素(从第一个元素到最后一个元素);返回数组的运行时类型是指定数组的运行时类型。
int size() 用于返回List中的元素数。

7 Java LinkedList的例子

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java LinkedList的例子
 */
import java.util.*;

public class Demo{

    public static void main(String args[]){

        LinkedList<String> al=new LinkedList<String>();
        al.add("eric");
        al.add("jack");
        al.add("mark");
        al.add("lucy");

        Iterator<String> itr=al.iterator();
        while(itr.hasNext()){
            System.out.println(itr.next());
        }
    }
}

输出结果为:

eric
jack
mark
lucy

8 Java LinkedList添加元素

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java LinkedList的例子
 */
import java.util.*;

public class Demo{

    public static void main(String args[]){
        LinkedList<String> ll=new LinkedList<String>();
        System.out.println("初始化LinkedList: "+ll);
        ll.add("eric");
        ll.add("jack");
        ll.add("macy");
        System.out.println("调用add(E e)方法后: "+ll);
        //添加元素
        ll.add(1, "mark");
        System.out.println("调用add(int index, E element)方法后: "+ll);
        LinkedList<String> ll2=new LinkedList<String>();
        ll2.add("rose");
        ll2.add("lucy");
        //添加元素
        ll.addAll(ll2);
        System.out.println("调用addAll(Collection<? extends E> c)方法后: "+ll);
        LinkedList<String> ll3=new LinkedList<String>();
        ll3.add("John");
        ll3.add("Paul");
        //添加元素
        ll.addAll(1, ll3);
        System.out.println("调用addAll(int index, Collection<? extends E> c)方法后: "+ll);
        //添加元素
        ll.addFirst("lucas");
        System.out.println("调用addFirst(E e)方法后: "+ll);
        //添加元素
        ll.addLast("Narci");
        System.out.println("调用addLast(E e)方法后: "+ll);

    }
}

输出结果为:

初始化LinkedList: []
调用add(E e)方法后: [eric, jack, macy]
调用add(int index, E element)方法后: [eric, mark, jack, macy]
调用addAll(Collection<? extends E> c)方法后: [eric, mark, jack, macy, rose, lucy]
调用addAll(int index, Collection<? extends E> c)方法后: [eric, John, Paul, mark, jack, macy, rose, lucy]
调用addFirst(E e)方法后: [lucas, eric, John, Paul, mark, jack, macy, rose, lucy]
调用addLast(E e)方法后: [lucas, eric, John, Paul, mark, jack, macy, rose, lucy, Narci]

9 Java LinkedList删除元素

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java LinkedList的例子
 */
import java.util.*;

public class Demo {


    public static void main(String [] args)
    {
        LinkedList<String> ll=new LinkedList<String>();
        ll.add("eric");
        ll.add("jack");
        ll.add("mark");
        ll.add("lucy");
        ll.add("macy");
        ll.add("narci");
        ll.add("rose");
        ll.add("lucas");
        ll.add("Paul");
        ll.add("Jackson");
        System.out.println("初始化LinkedList: "+ll);
        //删除元素
        ll.remove("Vijay");
        System.out.println("调用remove(object)方法后: "+ll);
        //删除元素
        ll.remove(0);
        System.out.println("调用remove(index)方法后: "+ll);
        LinkedList<String> ll2=new LinkedList<String>();
        ll2.add("Ravi");
        ll2.add("Hanumat");
        //添加元素
        ll.addAll(ll2);
        System.out.println("Updated list : "+ll);
        //删除元素
        ll.removeAll(ll2);
        System.out.println("调用removeAll()方法后: "+ll);
        //删除元素
        ll.removeFirst();
        System.out.println("调用removeFirst()方法后: "+ll);
        //删除元素
        ll.removeLast();
        System.out.println("调用removeLast()方法后: "+ll);
        //删除元素
        ll.removeFirstOccurrence("Paul");
        System.out.println("调用removeFirstOccurrence()方法后: "+ll);
        //删除元素
        ll.removeLastOccurrence("narci");
        System.out.println("调用removeLastOccurrence()方法后: "+ll);

        //删除元素
        ll.clear();
        System.out.println("调用clear()方法后: "+ll);
    }
}

输出结果为:

初始化LinkedList: [eric, jack, mark, lucy, macy, narci, rose, lucas, Paul, Jackson]
调用remove(object)方法后: [eric, jack, mark, lucy, macy, narci, rose, lucas, Paul, Jackson]
调用remove(index)方法后: [jack, mark, lucy, macy, narci, rose, lucas, Paul, Jackson]
Updated list : [jack, mark, lucy, macy, narci, rose, lucas, Paul, Jackson, Ravi, Hanumat]
调用removeAll()方法后: [jack, mark, lucy, macy, narci, rose, lucas, Paul, Jackson]
调用removeFirst()方法后: [mark, lucy, macy, narci, rose, lucas, Paul, Jackson]
调用removeLast()方法后: [mark, lucy, macy, narci, rose, lucas, Paul]
调用removeFirstOccurrence()方法后: [mark, lucy, macy, narci, rose, lucas]
调用removeLastOccurrence()方法后: [mark, lucy, macy, rose, lucas]
调用clear()方法后: []

10 Java LinkedList反转元素

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * Java LinkedList的例子
 */
import java.util.*;

public class Demo{

    public static void main(String args[]){

        LinkedList<String> ll=new LinkedList<String>();
        ll.add("eric");
        ll.add("jack");
        ll.add("rose");
        //反转元素
        Iterator i=ll.descendingIterator();
        while(i.hasNext())
        {
            System.out.println(i.next());
        }

    }
}

输出结果为:

rose
jack
eric

 

推荐好课