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()
- 返回此列表的最后一个元素。
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());
}
}