(Java)这段代码谁帮我解释一下,一点都看不懂。 要超详细的解释(我比较笨).............
publicclassLinkedStack<T>{privatestaticclassNode<U>{Uitem;Node<U>next;Node(){item=nul...
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;}
}
private Node<T> top = new Node<T>();
public void push(T item){
top = new Node<T>(item,top);
}
public T pop(){
T result = top.item;
if(!top.end()){
top = top.next;
}
return result;
}
public static void main(String[] args){
LinkedStack<String> lss = new LinkedStack<String>();
for(String s:"Phasers on stun!".split("")){
lss.push(s);
}
String s;
while((s=lss.pop())!=null){
System.out.println(s);
}
}
}
整段代码宏观我就没搞懂。
这段代码想要干什么,干了什么,具体代码实现了什么。
可以联系起来 讲讲吗?
拜托,,,,,,,,,,,,,, 展开
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;}
}
private Node<T> top = new Node<T>();
public void push(T item){
top = new Node<T>(item,top);
}
public T pop(){
T result = top.item;
if(!top.end()){
top = top.next;
}
return result;
}
public static void main(String[] args){
LinkedStack<String> lss = new LinkedStack<String>();
for(String s:"Phasers on stun!".split("")){
lss.push(s);
}
String s;
while((s=lss.pop())!=null){
System.out.println(s);
}
}
}
整段代码宏观我就没搞懂。
这段代码想要干什么,干了什么,具体代码实现了什么。
可以联系起来 讲讲吗?
拜托,,,,,,,,,,,,,, 展开
1个回答
展开全部
public class LinkedStack<T> { //自定公共类,<T> 是定义范型, 就是规定能放什么类型
// 我认为这是一个自定义容器
private static class Node<U> { // 自定义私有类,<U> 同上.
U item; // 声明范型 item
Node<U> next; // 声明自身私有类
Node() { // 构造函数,清空成员变量
item = null;
next = null;
}
Node(U item, Node<U> next) { // 带两个参数的构造函数,赋值操作
this.item = item;
this.next = next;
}
/**
* 方法:判断是否结束
* @return 如果两个成员变量都为NULL 则 返回 true
*/
boolean end() {
return item == null && next == null;
}
}
private Node<T> top = new Node<T>(); // 先实例了一个空的
public void push(T item) { // 一层套一层,
top = new Node<T>(item, top); // 实例一个新的 Node 里面又放一个 Node,
// 这种一层一层的感觉笑皮
}
public T pop() {
T result = top.item; // 找到当前那一层的 item , 赋值返回
if (!top.end()) { // 如果里面的成员变量是否都为空
top = top.next; // 如果不为空,就指向它里面的那个 Node 对象
}
return result;
}
public static void main(String[] args) {
LinkedStack<String> lss = new LinkedStack<String>(); //实例自定义容器
for (String s : "Phasers on stun!".split("")) { // 用""做拆分条件来拆分字符销升渗
lss.push(s); //一个字符一个字符的赋进去
}
String s; // 声明字符串
while ((s = lss.pop()) != null) { // 如果那一层的 item 有值就输出
System.out.println(s);
}
}
}
宏观的讲,LinkedStack 这个类是一个自定义容器类,容器里面放一个自定义类型类型的变量,和它本身的实体,就相当于实体里面还有实体,所以我说是一层又一层的关系。
所以你给你代码,输出的是反向的字符,因为它正向的一个字符一个字符的赋值进去亏脊,然后把上一个实体装进去,一层一层的,我觉得没必要,Java 本身有那么多优秀的 容器类,完全可以满足需要,没必要写自定义的。
如果还不明白,明天9点半过后至下午5点我Hi都在,可以回答你的问题。
// 我认为这是一个自定义容器
private static class Node<U> { // 自定义私有类,<U> 同上.
U item; // 声明范型 item
Node<U> next; // 声明自身私有类
Node() { // 构造函数,清空成员变量
item = null;
next = null;
}
Node(U item, Node<U> next) { // 带两个参数的构造函数,赋值操作
this.item = item;
this.next = next;
}
/**
* 方法:判断是否结束
* @return 如果两个成员变量都为NULL 则 返回 true
*/
boolean end() {
return item == null && next == null;
}
}
private Node<T> top = new Node<T>(); // 先实例了一个空的
public void push(T item) { // 一层套一层,
top = new Node<T>(item, top); // 实例一个新的 Node 里面又放一个 Node,
// 这种一层一层的感觉笑皮
}
public T pop() {
T result = top.item; // 找到当前那一层的 item , 赋值返回
if (!top.end()) { // 如果里面的成员变量是否都为空
top = top.next; // 如果不为空,就指向它里面的那个 Node 对象
}
return result;
}
public static void main(String[] args) {
LinkedStack<String> lss = new LinkedStack<String>(); //实例自定义容器
for (String s : "Phasers on stun!".split("")) { // 用""做拆分条件来拆分字符销升渗
lss.push(s); //一个字符一个字符的赋进去
}
String s; // 声明字符串
while ((s = lss.pop()) != null) { // 如果那一层的 item 有值就输出
System.out.println(s);
}
}
}
宏观的讲,LinkedStack 这个类是一个自定义容器类,容器里面放一个自定义类型类型的变量,和它本身的实体,就相当于实体里面还有实体,所以我说是一层又一层的关系。
所以你给你代码,输出的是反向的字符,因为它正向的一个字符一个字符的赋值进去亏脊,然后把上一个实体装进去,一层一层的,我觉得没必要,Java 本身有那么多优秀的 容器类,完全可以满足需要,没必要写自定义的。
如果还不明白,明天9点半过后至下午5点我Hi都在,可以回答你的问题。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询