Java行转列

在Java编程中,有时候需要将一维数组中的数据按行转列,即将数据从横向排列变为纵向排列。这在实际应用中非常常见,比如在数据处理或者数据分析中,我们经常需要对数据进行转置操作。本文将介绍如何使用Java实现行转列的操作,并提供相应的代码示例。

理解行转列

在开始编写代码之前,我们先来理解一下行转列的概念。行转列,顾名思义就是将原始数据从行向列进行排列,即将原本按照行存储的数据重新排列成按照列存储的形式。

例如,假设我们有一个2行3列的矩阵:

1 2 3
4 5 6

行转列后的结果应该是一个3行2列的矩阵:

1 4
2 5
3 6

实现行转列

在Java中,我们可以使用二维数组或者ArrayList来表示矩阵,并通过遍历原始数据,按照列来重新存储数据来实现行转列的操作。

下面是使用二维数组的示例代码:

public class TransposeMatrix {
    public static void main(String[] args) {
        int[][] matrix = {{1, 2, 3}, {4, 5, 6}};
        int rows = matrix.length;
        int cols = matrix[0].length;
        
        int[][] transposedMatrix = new int[cols][rows];
        
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                transposedMatrix[j][i] = matrix[i][j];
            }
        }
        
        for (int i = 0; i < cols; i++) {
            for (int j = 0; j < rows; j++) {
                System.out.print(transposedMatrix[i][j] + " ");
            }
            System.out.println();
        }
    }
}

上述代码中,我们首先定义了一个二维数组matrix来表示原始的矩阵,然后获取矩阵的行数和列数,创建一个新的二维数组transposedMatrix来表示转置后的矩阵。

接下来,我们使用嵌套的循环遍历原始矩阵,将第i行第j列的元素赋值给转置矩阵的第j行第i列的位置。最后,使用另外一个嵌套循环打印转置后的矩阵。

运行上述代码,将会输出以下结果:

1 4 
2 5 
3 6 

使用ArrayList实现

除了使用二维数组,我们还可以使用ArrayList来实现行转列的操作。使用ArrayList的好处是,可以动态调整容器的大小,对于不确定大小的矩阵,比较方便。

下面是使用ArrayList的示例代码:

import java.util.ArrayList;
import java.util.List;

public class TransposeMatrix {
    public static void main(String[] args) {
        List<List<Integer>> matrix = new ArrayList<>();
        matrix.add(List.of(1, 2, 3));
        matrix.add(List.of(4, 5, 6));
        
        int rows = matrix.size();
        int cols = matrix.get(0).size();
        
        List<List<Integer>> transposedMatrix = new ArrayList<>();
        
        for (int j = 0; j < cols; j++) {
            List<Integer> col = new ArrayList<>();
            for (int i = 0; i < rows; i++) {
                col.add(matrix.get(i).get(j));
            }
            transposedMatrix.add(col);
        }
        
        for (List<Integer> row : transposedMatrix) {
            for (int num : row) {
                System.out.print(num + " ");
            }
            System.out.println();
        }
    }
}

上述代码中,我们使用了List<List<Integer>>来表示矩阵,并使用List.of()方法添加矩阵的每一行。

然后,我们首先获取矩阵的行数和列数,并创建一个新的ArrayListtransposedMatrix用于存储转置后的矩阵。

接着,我们使用两层循环,将原始矩阵的第