浅析LinkedList及其应用

1首先介绍下java容器类。

java2容器类类库的用户是“保存对象”,并将其划分为两个不同的概念:

1)  Collection。一组独立的元素,通常这些元素都服从某些规则。List必须保持元素特定的顺序,而Set不能有重复元素。

2)  Map.Map同样对每个元素只保留一份,也有内置的排序。

因此,通常java容器可以分为List,Set,和Map三种类型。

其中List实际上又有两种类型:一种是基本的ArrayList,其优点在于随机访问元素;另一种就是本文要介绍的LinkedList,它并不是针对快速随机访问而设计的,而是具有一套更通用的方法,正是这些方法使得LinkedList可以当做堆栈、队列和双向队列使用。

下表是Collection的的一些通用的功能方法

boolean add(Object)

确保容器持有此参数。如果没有将此参数添加进容器,则返回false;

boolean addAll(Collection)

添加参数中的所有元素。只要添加了任意元素就返回true.

Void clead()

移除容器中的所有元素

boolean contains(Object)

如果容器持有此参数,则返回true。

boolean containsAll(Collection)

如果容器中持有此参数中的所有元素,则返回true。

Boolean isEmpty()

容器中没有元素是返回true。

Iterator iterator()

返回一个Iterator,可以用来遍历容器中的元素。

boolean remove(Object)

如果参数在容器中,则移除此元素的一个实例,如果做了移除动作,则返回true。

boolean removeAll(Collection)

移除参数中的所有元素,只要有移除动作发生,就返回true.

boolean retainAll(Collection)

只保存参数中的元素(应用集合论中“交集”的概念)。只要Collection发生了改变就返回true.

Int size()

返回容器中元素的数目

Object[] toArray()

返回一个数组,该数组包含容器中的所有元素

Object[] toArray(Object[] a)

返回一个数组,该数组包含容器中的所有元素,其类型与数组a 的类型相同,而不是单纯的Object(必须对数组做类型转换)


接下来,介绍LinkedList的一些专用方法:

addFirst

public void addFirst(E e)
将指定元素插入此列表的开头。

addLast

public void addLast(E e)
将指定元素添加到此列表的结尾。

此方法等效于 add(E)

removeFirst

public E removeFirst()
移除并返回此列表的第一个元素。 

removeLast

public E removeLast()
移除并返回此列表的最后一个元素。 

getFirst

public E getFirst()
返回此列表的第一个元素。 

getLast

public E getLast()
返回此列表的最后一个元素。 
下面介绍LinkedList的应用:
1.使用LinkedList制作栈:
“栈”是“后进先出”的容器
import java.util.LinkedList;

public class StackL{
	private LinkedList list=new LinkedList();
	public void push(Object v){list.addFirst(v);}
	public Object top(){return list.getFirst();}
	public Object pop(){return list.removeFirst();}
	public static void main(String args[]){
		StackL stack=new StackL();
		for(int i=0;i<10;i++)
			stack.push(i);
		System.out.println(stack.top());
		System.out.println(stack.top());
		System.out.println(stack.pop());
		System.out.println(stack.pop());
	}
}

2.使用LinkedList制作队列
“队列”是“先进先出”的容器
import java.util.LinkedList;

public class Queue{
	private LinkedList list=new LinkedList();
	public void put(Object v){list.addFirst(v);}
	public Object get(){return list.removeLast();}
	public boolean isEmpty(){return list.isEmpty();}
	public static void main(String args[]){
		Queue queue=new Queue();
		for(int i=0;i<10;i++)
			queue.put(Integer.toString(i));
		while(!queue.isEmpty())
			System.out.println(queue.get());
	}
}
3.使用LinkedList制作双向队列
可以从两个方向添加和移除元素
import java.util.LinkedList;

public class Dique
{
	private LinkedList list=new LinkedList();
	public void putHead(Object v){list.addFirst(v);}
	public void putTail(Object v){list.addLast(v);}
	public Object getHead(){return list.removeFirst();}
	public Object getTail(){return list.removeLast();}
	public boolean isEmpty(){return list.isEmpty();}
	public static void main(String args[]){
		Dique dique=new Dique();
		for(int i=0;i<10;i++)
			dique.putHead(Integer.toString(i));
		int j=5;
		while(!dique.isEmpty()&&j>0)
		{
			System.out.println(dique.getTail());
			j--;
		}
		for(int i=5;i<10;i++)
			dique.putTail(Integer.toString(i));	
		while(!dique.isEmpty())
				System.out.println(dique.getHead());
					
	}
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值