Java之LinkedList

LinkedList(基于链表的数据结构)
List接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括null)。除了实现List接口外,LinkedList类还为在列表的开头及结尾get、remove和insert元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列(deque)。
1.对于随机访问get和set,ArrayList觉得优于LinkedList,因为ArrayList根据索引index访问,而LinkedList要移动指针访问;
2.对于增加add和删除remove操作,LinkedList觉得优于ArrayList,因为ArrayList要移动插入位置后面的数据,LinkedList只需要修改一对前后指针即可;
3.但是对于在末尾插入和删除数据ArrayList要比LinkedList快些,根据实际情况来看,但是可以这样总结:对于频繁的随机访问数据用ArrayList,频繁的插入和删除数据用LinkedList。
LinkedList是一种双向的链式结构,与ArrayList相比插入和删除更方便,但是有时速度会相对慢些。
LinkedList的同步实现:
List list = Collections.synchronizedList(new LinkedList(...));


java中用LinkedList实现栈和队列
栈和队列是两种特殊的线性表,它们的逻辑结构和线性表相同,只是其运算规则较线性表有更多的限制,所以称它们为运算受限的线性表。
栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。
import java.util.LinkedList;
public class StackDemo {
    // 压栈
	LinkedList linkedlist = new LinkedList();
	public void push(Object object)
	{
		linkedlist.addFirst(object);
	}
	// 出栈
	public Object pop()
	{
	if(! linkedlist.isEmpty())
		return linkedlist.removeFirst();
	return "栈内无元素";
	}
	public boolean isEmpty()
	{
		return linkedlist.isEmpty();
	}
	public void clear()
	{
		linkedlist.clear();
	}
	public int getSize()
	{
		return linkedlist.size();
	}
	public static void main(String[] args)
	{
		StackDemo myStack = new StackDemo();
		myStack.push(1);
		myStack.push(2);
		myStack.push(3);
		System.out.println(myStack.pop());
		System.out.println(myStack.pop());
		System.out.println("栈的大小为:    "+myStack.getSize());
		myStack.clear();
		System.out.println("栈的大小为:   "+myStack.getSize());
	}
}

队列(Queue)是只允许在一端进行插入,另一端进行删除的运算受限的线性表。允许删除的一端称为队头(Front),允许删除的一端称为队尾(Rear)。
import java.util.LinkedList;

public class QueueDemo {
	
	LinkedList linkedlist = new LinkedList();
    //  队尾插入元素
	public void put(Object object)
	{
		linkedlist.addLast(object);
	}
	public boolean isEmpty()
	{
		return linkedlist.isEmpty();
	}
	//  队头删除元素
	public Object get()
	{
		if(!linkedlist.isEmpty())
			return linkedlist.removeFirst();
		return "队列为空队列" ;
	}
	public int getSize()
	{
		return linkedlist.size();
	}
	public void clear()
	{
		linkedlist.clear();
	}
	public static void main(String[] args)
	{
		QueueDemo myQueue = new QueueDemo();
		myQueue.put(1);
		myQueue.put(2);
		myQueue.put(3);
		System.out.println(myQueue.get());
		System.out.println(myQueue.get());
		System.out.println(myQueue.getSize());
	}
}

LinkedList相关方法:
boolean offer(E o)将制定元素添加到此列表的末尾;
E  peek()找到但不移除此列表的第一个元素;
E  poll()找到并移除此列表的第一个元素,同remove()等价;size();
E  remove(int  index);removeFirst()移除并返回此列表的第一个元素;removeLast();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值