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();