如何为基于List实现的Stack类编写toString()方法?
给Stack类实现toString()的简单方案
嘿,你已经搞定了List类的toString(),那Stack类的toString()就超级好实现啦——直接委托给内部的List实例就行!
因为你的Stack类是基于List来实现的,所有栈的元素都存在这个list对象里,而List已经能正确把元素转成字符串了,所以Stack的toString()只需要调用list.toString(),甚至可以包装一下让输出更明确是栈结构。
具体实现代码
把下面的方法加到你的Stack类里就行:
public class Stack { private List list; public Stack() { list = new List(); } // 新增Stack的toString()方法 @Override public String toString() { // 方案1:直接返回List的toString结果 // return list.toString(); // 方案2:包装成更清晰的栈标识(推荐) return "[Stack: " + list.toString() + "]"; } // 你的内部List类(已实现toString) public class List{ // 省略Node、head等成员变量和其他方法... public String toString() { Node temp = head; String string = ""; while (temp != null && temp.getNext() != null) { string = string + temp.getElement() + ", "; temp = temp.getNext(); } if (temp != null) { string = string + temp.getElement() + "."; } return string; } } }
为什么这么做?
- 你的List类已经处理了遍历所有节点、拼接元素的逻辑,Stack没必要重复造轮子,直接复用就好。
- 方案2的包装写法能让输出更直观,比如如果栈里有元素1、2、3,输出会是
[Stack: 1, 2, 3.],一眼就能看出来这是一个栈的内容。
测试的时候怎么用?
在主方法里创建Stack实例,push几个元素后直接打印就行:
public static void main(String[] args) { Stack stack = new Stack(); stack.push("A"); stack.push("B"); stack.push("C"); // 直接打印stack,会自动调用toString() System.out.println(stack); }
这样就能完美输出栈的内容啦!
内容的提问来源于stack exchange,提问作者JavaPSPSPS
相关产品推荐
相关产品推荐

