使用泛型创建简单内部链式存储机制

今天看书看到了一个非常有意思的代码,源代码在《think in java》弟357页,代码如下:

package B;


public class LinkedStack {


private static class Node{
U item;
Node next;
Node(){
item = null;
next = null;
}

Node(U item, Node next){
this.item = item;
this.next = next;
}

boolean end(){
return item == null&&next == null;
}
}
1. private Node top = new Node();
public void push(T item){
2. top = new Node(item, top);
}

public T pop(){
T result = top.item;
3,。 if(!top.end()){
top = top.next;
}

return result;
}
public static void main(String[] args) {
LinkedStack lss = new LinkedStack();
for(String s : "A B C D".split(" ")){
lss.push(s);
}
String s;
while((s = lss.pop())!=null){
System.out.println(s);
}
}
}

当第一次看这段代码时,没有理解怎么实现的存储功能,经过debug一步一步调试后,最终弄明白了是如何实现的

下面做一些简单的解释:

main方法中创建了类的同时,其内部已经创建了使用泛型的类Node,

在调用push()方法时,这个方法中的代码很重要,首先,会把截取的A保存进标一的那段代码中的top对象,然后把这个top对象赋值保存给自己本身携带的Node属性,也就是

代码的第四行Node next;

此时然后覆盖之前的top对象,此时的top对象即包含之前的top,也就是next,又包含已经赋值的item,值为A。

再看第二次赋值,第二次调用push方法时,会把最新的top对象(此对象中含有item = A 和 next = top(这个top中的item和next皆为Null))再一次传给自己本身,然后产生新包含上一个top对象的top对象,此时最新的top对象的itm=B,依次赋值,实现保存数据的功能,也就是每个被保存的数据都对应一个Node类型的对象。


这样说可能有些抽象,上一张图片表述一下:

使用泛型创建简单内部链式存储机制_第1张图片

就是这样嵌套完成的功能,同样取数据的pop()方法则也是用赋值本身的办法反向取值

你可能感兴趣的:(《think,in,java》代码感悟)