You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何重写Queue的toString()方法以正确打印含int数组的队列

解决Queue<int[]>打印显示数组地址的问题

问题根源在于:LinkedList(Queue的实现类)的默认toString()方法会调用每个元素的默认toString(),而int[]作为数组对象,其默认toString()输出的是内存地址标识(如[I@58d25a40)。

要实现可读的输出,你需要重写LinkedList的toString()方法(因为Queue是接口,无法直接重写其方法),以下是两种可行方案:

方案一:自定义LinkedList子类

创建一个继承自LinkedList的子类,重写toString()来处理数组元素:

import java.util.LinkedList;
import java.util.Queue;
import java.util.Arrays;

class IntArrayQueue extends LinkedList<int[]> {
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("[");
        boolean isFirst = true;
        for (int[] arr : this) {
            if (!isFirst) {
                sb.append(", ");
            }
            sb.append(Arrays.toString(arr));
            isFirst = false;
        }
        sb.append("]");
        return sb.toString();
    }
}

// 使用示例
public class Main {
    public static void main(String[] args) {
        Queue<int[]> queue = new IntArrayQueue();
        queue.add(new int[]{1, 2, 3});
        queue.add(new int[]{4, 5});
        System.out.println(queue); // 输出: [[1, 2, 3], [4, 5]]
    }
}

方案二:使用匿名内部类

如果不想单独定义子类,可以直接用匿名内部类重写toString():

import java.util.LinkedList;
import java.util.Queue;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        Queue<int[]> queue = new LinkedList<int[]>() {
            @Override
            public String toString() {
                StringBuilder sb = new StringBuilder("[");
                boolean isFirst = true;
                for (int[] arr : this) {
                    if (!isFirst) {
                        sb.append(", ");
                    }
                    sb.append(Arrays.toString(arr));
                    isFirst = false;
                }
                sb.append("]");
                return sb.toString();
            }
        };

        queue.add(new int[]{1, 2});
        queue.add(new int[]{3, 4, 5});
        System.out.println(queue); // 输出: [[1, 2], [3, 4, 5]]
    }
}

两种方案的核心逻辑都是:在重写的toString()中遍历队列元素(无需你在打印时手动遍历),用Arrays.toString()将每个int[]转换为可读的字符串格式,再拼接成队列的整体字符串。

内容的提问来源于stack exchange,提问作者abhijit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:35:09