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

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

package B;


public class LinkedStack<T> {


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

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

boolean end(){
return item == null&&next == null;
}
}
1. private Node<T> top = new Node<T>();
public void push(T item){
2. top = new Node<T>(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<String> lss = new LinkedStack<String>();
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<U> next;

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

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


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


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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值