java中自带实现堆栈与队列的方法
堆栈
package test.java;
import java.util.Stack;
/**
* 堆栈类的使用
* @author KING
*/
public class TestStack {
/*
* public class Stackextends VectorStack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类
* Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的
* empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。
*/
public static void main(String[] args) {
Person person1 = new Person();
person1.setName("111");
Person person2 = new Person();
person2.setName("222");
Person person3 = new Person();
person3.setName("333");
Person person4 = new Person();
person4.setName("444");
Stack stack = new Stack();
stack.push(person1);// 把项压入堆栈顶部
stack.push(person2);
stack.push(person3);
stack.push(person4);
System.out.println(stack.toString());// 堆栈带toString()方法
System.out.println(stack.peek());// 查看堆栈顶部的对象,但不从堆栈中移除它
System.out.println(stack.search(person1));// 返回对象在堆栈中的位置,以 1 为基数
System.out.println(stack.empty());// 测试堆栈是否为空。
stack.pop();// 移除堆栈顶部的对象,并作为此函数的值返回该对象。
System.out.println(stack.toString());
}
}
队列
本以为队列和堆栈一样也是实例化一个类来实现,写出来才发现,原来他是通过接口来实现的。
package test.java;
import java.util.LinkedList;
import java.util.Queue;
public class TestQueue {
/**
* 接口 Queue 已知实现类有:
* AbstractQueue, ArrayBlockingQueue, ArrayDeque,
* ConcurrentLinkedQueue, DelayQueue, LinkedBlockingDeque,
* LinkedBlockingQueue, LinkedList, PriorityBlockingQueue, PriorityQueue,
* SynchronousQueue
*/
public static void main(String[] args) {
Person person1 = new Person();
person1.setName("111");
Person person2 = new Person();
person2.setName("222");
Person person3 = new Person();
person3.setName("333");
Person person4 = new Person();
person4.setName("444");
Queue queue = new LinkedList();
/*
* 如果可能,offer 方法可插入一个元素,否则返回 false。这与 Collection.add
* 方法不同,该方法只能通过抛出未经检查的异常使添加元素失败。offer
* 方法设计用于正常的失败情况,而不是出现异常的情况,例如在容量固定(有界)的队列中。
*/
queue.offer(person1);
queue.offer(person2);
queue.offer(person3);
queue.offer(person4);
/*
* 当我想用queue.toString()方法时在我的myeclipse中竟然显示他是一个object的toString.
* 结果发现竟然还能用。经过查找toString在AbstractCollection类中,是myeclipse的显示问题
*/
System.out.println(queue.toString());
System.out.println(queue.peek());// element() 和 peek() 返回,但不移除,队列的头。
/*
* remove() 和 poll()
* 方法可移除和返回队列的头。到底从队列中移除哪个元素是队列排序策略的功能,而该策略在各种实现中是不同的。remove() 和 poll()
* 方法仅在队列为空时其行为有所不同:remove() 方法抛出一个异常,而 poll() 方法则返回 null。
*/
System.out.println(queue.poll());
System.out.println(queue.peek());
}
}
用于实现测试的Person类
package test.java; /** * 此类用来测试一些最基本的java编程思想 */ public class Person { private String name;// 声明成private只有在类的内部才能用(类名.)的方法调用。 public int age;//共有成员变量 protected final int headNum = 1;// 声明称protected一般情况下是为了继承,只有在一个包中的类才能访问 /** * 所有的变量无论声明成私有的还是共有的都能够通过调用类中的方法来获得 */ public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getHeadNum() { return headNum; } @Override public String toString() {// toString是为了能够方便的输出类所有的成员变量,若果不构建toString方法无法直接输出一个类。 return "Person [name=" + name + ", age=" + age + ", headNum=" + headNum + "]"; } }