LinkedList 方法大全(栈、队列)

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

 

1、常用方法:

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

LinkedList<String>list = new LinkedList<String>();

 

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

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

 

2)生成子链表:

List<String> 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

ArrayList<String>arrayList = new ArrayList<String>(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<T> {

    private Queue<T> storage = newLinkedList<T>();

 

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

    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<T> {

    private LinkedList<T> storage = newLinkedList<T>();

 

     /** 入栈 */

    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(双端队列)实例。由于只暴露部分基于栈实现的接口,所以可以提供安全的栈实现。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值