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

Android平台下实现一维数组队列并无额外内存转为二维数组的方法

如何在Android中实现存储一维数组的Queue并在低内存开销下转换为二维矩阵?

先看你提供的测试代码,这里有个关键问题:你在循环里复用了同一个int[] arr对象,每次调用data.add(arr)只是把这个数组的引用加入队列,所以最后队列里的所有元素其实都是同一个数组的引用,最终所有元素都会是你最后一次输入的值。这是第一个要修正的点。

接下来解决你的核心需求:实现存储一维数组的Queue,并且在**不占用额外内存(除了必要的二维数组引用结构)**的前提下转成二维矩阵。其实思路很简单,因为二维矩阵int[][]本质就是存储多个一维数组的引用,所以我们只需要把Queue中的一维数组引用直接迁移到二维数组中即可,不需要复制数组元素,这样内存开销最小。

步骤1:正确实现存储一维数组的Queue

先修正你的测试代码,每次循环都创建新的一维数组,确保队列里的每个元素都是独立的数组:

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class QueueToMatrixTest {
    public static void main(String[] args) {
        // 存储一维数组的Queue,使用LinkedList实现
        Queue<int[]> dataQueue = new LinkedList<>();
        Scanner scan = new Scanner(System.in);

        // 示例:添加3个长度为3的一维数组
        for (int j = 0; j < 3; j++) {
            // 每次循环新建一个数组,避免引用复用
            int[] arr = new int[3];
            for (int i = 0; i < 3; i++) {
                arr[i] = scan.nextInt();
            }
            dataQueue.add(arr);
        }
        scan.close();
    }
}

步骤2:低内存开销转换为二维矩阵

要做到最小内存开销,我们不需要复制任何数组元素,只需要把Queue中的一维数组引用直接放到二维数组里。具体实现如下:

// 转换为二维矩阵
int[][] matrix = new int[dataQueue.size()][];
int index = 0;
// 遍历队列,直接将数组引用赋值到二维矩阵
for (int[] arr : dataQueue) {
    matrix[index++] = arr;
}

// 验证输出
System.out.println("转换后的二维矩阵:");
for (int[] row : matrix) {
    for (int num : row) {
        System.out.print(num + " ");
    }
    System.out.println();
}

为什么这个方法内存开销小?

  • 二维数组matrix本身只是一个存储引用的数组,它的大小是队列长度 * 引用大小(在Java中一个引用占4或8字节,取决于平台),这是不可避免的必要开销。
  • 我们没有复制任何一维数组的元素,只是把原队列中已有的一维数组的引用直接赋值给二维矩阵的行,所以不会额外占用存储数组元素的内存。

Android平台的注意事项

在Android中,这个实现完全兼容:

  • LinkedList和Queue都是Java标准库类,Android全版本支持。
  • 如果是在UI线程中处理输入,不要用Scanner,可以通过EditText获取输入内容后拆分转换为int数组,避免阻塞UI线程。

比如Android中的简易示例(在Activity中):

import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.LinkedList;
import java.util.Queue;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView resultTv = findViewById(R.id.result_tv);

        // 模拟存储一维数组的Queue
        Queue<int[]> dataQueue = new LinkedList<>();
        dataQueue.add(new int[]{1,2,3});
        dataQueue.add(new int[]{4,5,6});
        dataQueue.add(new int[]{7,8,9});

        // 转换为二维矩阵
        int[][] matrix = new int[dataQueue.size()][];
        int index = 0;
        for (int[] arr : dataQueue) {
            matrix[index++] = arr;
        }

        // 显示结果
        StringBuilder sb = new StringBuilder();
        for (int[] row : matrix) {
            for (int num : row) {
                sb.append(num).append(" ");
            }
            sb.append("\n");
        }
        resultTv.setText(sb.toString());
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:53:05