java 如何将对象转换为二维数组? 您所在的位置:网站首页 java如何把list转换为数组 java 如何将对象转换为二维数组?

java 如何将对象转换为二维数组?

2023-03-15 05:15| 来源: 网络整理| 查看: 265

下面是我可能会如何处理它。

import java.util.Arrays; import java.util.Random;

下面的代码非常简单,我只是选择了一些值来表示int数组的键大小,并使用一个流来填充它。

public class MatrixDemo { public static void main(String[] args) { Random r = new Random(); int rows = 4; int cols = 3; int maxRowVal = 20; int maxColVal = 30; int[][] vals = r.ints(rows, 1, maxRowVal + 1) .mapToObj(rval -> r.ints(cols, 1, maxColVal + 1).toArray()) .toArray(int[][]::new); // the following demonstrates the defensive capability. Changing the // int array does not alter the Matrix for (int[] v : vals) { System.out.println(Arrays.toString(v)); } System.out.println("Matrix A:"); Matrix m2 = new Matrix(); m2.setMatrixVals(vals); vals[2][2] = 1000; System.out.println(vals[2][2]); for (int[] v : m2.getMatrixVals()) { System.out.println(Arrays.toString(v)); } } }

打印出这样的东西。

[24, 10, 30] [7, 20, 8] [29, 8, 27] [11, 3, 3] Matrix A: 1000 [24, 10, 30] [7, 20, 8] [29, 8, 27] [11, 3, 3]

这里重要的是使用防御性复制,这样如果提供的数组在类外被更改,它不会更改Matrix array。矩阵值只能由setter更改。当检索值时,它们应该被再次复制,这样返回的副本,如果被修改,不会更改矩阵。为了完成复制,我使用了clone()方法。它在对象克隆方面有它的问题,但当涉及到原语数组时,它工作得很好。以这种方式制作防御性副本可能看起来代价高昂,但它被认为是一种很好的技术,可以帮助防止意外修改潜入代码。

class Matrix { // instance fields private int[][] matrixVals; public Matrix() { // create an empty Matrix // to be populated by using the setMatrixVals method } public Matrix(int[][] mVals) { matrixVals = copyValues(mVals); } public void setMatrixVals(int[][] mVals) { matrixVals = copyValues(mVals); } public int[][] getMatrixVals() { return copyValues(matrixVals); } public int getValueAt(int row, int col) { return matrixVals[row][col]; } private int[][] copyValues(int[][] vals) { int[][] copy = new int[vals.length][vals[0].length]; int i = 0; for(int[] v : vals) { copy[i++] = v.clone(); } return copy; } }

您可以添加的其他方法包括

从现有矩阵创建新矩阵。这可以是集的形式,也可以是不同的构造函数。在行、列位置设置特定元素。重写toString()以便可以打印对象。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有