LinkedList 方法大全(栈、队列)

LinkedList类是双向列表(底层使用链表结构),列表中的每个节点都包含了对前一个和后一个元素的引用LinkedList有很多方法,通过这些方法可以很容易将其用作队列、栈等数据结构。

 

1、常用方法:

1)获取第一、最后一个元素:

LinkedListlist = new LinkedList();

 

System.out.println("链表的第一个元素是: " + list.getFirst()); 

System.out.println("链表最后一个元素是: " + list.getLast());

 

2)生成子链表:

List sub = list.subList(1, 3);//subList(int fromIndex,int toIndex)下标从0开始,不包含最后的toIndex

System.out.println(sub);

 

3)插入:

publicboolean add(Object element)元素将被添加到链表的最后

public boolean add(int index, Object element)元素将被添加到链表指定索引的位置(从0开始);

publicboolean addFirst(Object element):在头部插入;

publicboolean addLast(Object element):在尾部插入;

 

4)删除元素:

remove():删除第一个元素;

remove(int index):删除指定索引位置的元素(从0开始);

removeFirst():删除第一个元素;

removeLast():删除最后一个元素;

clear():清空列表;

list.subList(1,3).clear()根据范围删除列表元素

 

5将LinkedList转换成ArrayList

ArrayListarrayList = new ArrayList(linkedList); 

 

6)查找元素位置:

list.indexOf("e");//下标从0开始

 

7)替换元素:

set(int index, element);//下标从0开始

 

8)是否包含元素:

list.contains("eeee");//返回true或者false

 

2实现队列

importjava.util.LinkedList;

importjava.util.Queue;

 

public classMyQueue {

    private Queue storage = newLinkedList();

 

    /** 将指定的元素插入队尾 */

    public void offer(T v) {

        storage.offer(v);

    }

 

    /** 检索,但是不移除队列的头,如果此队列为空,则返回 null */

    public T peek() {

        return storage.peek();

    }

 

    /** 检索,但是不移除此队列的头 */

    /** 此方法与 peek 方法的惟一不同是,如果此队列为空,它会抛出一个异常 */

    public T element() {

        return storage.element();

    }

 

    /** 检索并移除此队列的头,如果队列为空,则返回 null */

    public T poll() {

        return storage.poll();

    }

 

    /** 检索并移除此队列的头 */

    /** 此方法与 poll 方法的不同在于,如果此队列为空,它会抛出一个异常 */

    public T remove() {

        return storage.remove();

    }

 

    /** 队列是否为空 */

    public boolean empty() {

        return storage.isEmpty();

    }

 

    /** 打印队列元素 */

    public String toString() {

        return storage.toString();

    }

}

说明:使用java.util.Queue接口,其底层关联到一个LinkedList(双端队列)实例。由于只暴露部分基于队列实现的接口,所以可以提供安全的队列实现。

 

3实现栈

importjava.util.LinkedList;

 

public classStack {

    private LinkedList storage = newLinkedList();

 

     /** 入栈 */

    public void push(T v) {

       storage.addFirst(v);

    }

 

     /** 出栈,但不删除 */

    public T peek() {

       return storage.getFirst();

    }

 

     /** 出栈 */

    public T pop() {

       return storage.removeFirst();

    }

 

     /** 栈是否为空 */

    public boolean empty() {

       return storage.isEmpty();

    }

 

     /** 打印栈元素 */

    public String toString() {

       return storage.toString();

    }

}

说明:提供一组栈的接口,其底层关联到一个LinkedList(双端队列)实例。由于只暴露部分基于栈实现的接口,所以可以提供安全的栈实现。

你可能感兴趣的:(java)