首先,我们根据需求。了解到是要一个栈结构的集合,而且是根据LinkedList来创建的。所以我们这里首先要想到,栈的数据结构是什么呢?当然是:【先进后出】
那么我们如何根据LinkedList创建一个栈结构的集合呢?我们可以想到的是自定义一个集合,根据LInkedList。
- 自定义的栈集合
public class MyStack {
private LinkedList link;
在MyStack创建时,及创建LinkedList链表集合,根据LinkedList集合特有方法去实现栈数据结构效果
public MyStack() {
link = new LinkedList();
}
LinkedList.addFirst()是实现先进后出的关键,该方法会把新添加进来的节点放置在第一个
那么当你取数据时,也是从第一个提取了
public void add(Object obj) {
link.addFirst(obj);
}
link.getFirst只能返回第一个,而没有弹栈的效果。所以这里使用的是LinkedList.removeFirst
那么这样提取数据,就有栈的弹栈效果了,取一个就删一个
public Object get() {
// return link.getFirst();
return link.removeFirst();
}
并且封装了一个判断功能,用于遍历使用
public boolean isEmpty() {
return link.isEmpty();
}
OK,上面我们自己封装了一个基于LinkedList的栈数据结构代码,那么我们看看如何使用吧:
-
MyStack的测试
public class MyStackDemo { public static void main(String[] args) { // 创建集合对象 MyStack ms = new MyStack(); // 添加元素 ms.add("hello"); ms.add("world"); ms.add("java"); // System.out.println(ms.get()); // System.out.println(ms.get()); // System.out.println(ms.get()); 这是getFirst()的方法,只能得到“java” // NoSuchElementException // System.out.println(ms.get()); while(!ms.isEmpty()){ System.out.println(ms.get()); 修改后的get()方法,实现了弹栈效果 }