Java泛型Deque类toString方法重写问题:无法输出可读首尾元素
解决Deque toString重写的可读输出问题
看起来你在做Java泛型的Deque实现练习,重写toString却得不到能验证逻辑的可读输出对吧?我来帮你捋清楚怎么写这个toString方法,既能看到首尾元素,也能验证整个Deque的内容。
首先,toString重写的核心是不要依赖默认的Object.toString()(它只会打印类名+哈希码),而是要主动拼接Deque里的元素,尤其是你关心的首尾节点。假设你的Deque是基于双向链表实现的(这是Deque常见的底层结构),我给你一个示例实现:
第一步:先确认你的泛型节点类
private static class Node<T> { T item; Node<T> prev; Node<T> next; Node(T item) { this.item = item; } }
第二步:重写Deque的toString方法
@Override public String toString() { // 处理空Deque的情况,避免空指针 if (isEmpty()) { return "Deque is empty"; } StringBuilder sb = new StringBuilder(); sb.append("Deque: ["); Node<T> current = head; // 假设你的头节点变量是head while (current != null) { // 给首尾元素加特殊标记,方便一眼识别 if (current == head) { sb.append("*").append(current.item).append("*"); // 头部元素用*包裹 } else if (current == tail) { // 假设你的尾节点变量是tail sb.append("*").append(current.item).append("*"); // 尾部元素用*包裹 } else { sb.append(current.item); } if (current.next != null) { sb.append(", "); } current = current.next; } sb.append("]"); return sb.toString(); }
关键细节说明
- 用
StringBuilder拼接字符串,比直接用+高效,尤其是元素数量较多的时候。 - 先判断空Deque的情况,返回明确的提示,避免后续遍历出现空指针异常。
- 给首尾元素加上
*标记,能快速验证头部添加、尾部添加等操作的正确性。 - 遍历整个Deque的元素,这样不仅能确认首尾,还能检查整个元素的顺序是否符合预期。
测试验证示例
你可以写一段简单的测试代码来验证效果:
public static void main(String[] args) { MyDeque<Integer> deque = new MyDeque<>(); deque.addFirst(1); deque.addFirst(2); deque.addLast(3); System.out.println(deque); // 预期输出:Deque: [*2*, 1, *3*] }
如果你的Deque是数组实现的,思路也是一致的:遍历数组中有效元素的范围,标记首尾位置的元素,拼接成可读字符串即可。
要是你只想快速验证首尾元素,也可以用更简洁的写法:
@Override public String toString() { if (isEmpty()) { return "Deque is empty"; } return String.format("Deque - First: %s, Last: %s", head.item, tail.item); }
这种方式输出更简洁,但看不到中间元素,适合只关心首尾正确性的场景。
内容的提问来源于stack exchange,提问作者A_Number
相关产品推荐
相关产品推荐

