为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Java 中的基本类型创建具有内部矩阵表示的 Matrix 泛型类

使用 Java 中的基本类型创建具有内部矩阵表示的 Matrix 泛型类

一只斗牛犬 2021-07-16 14:04:13
我有一个 Matrix 类,旨在封装数组的原始数组。我需要使用通用版本而不在内部使用对象来解决内存分配问题。有没有办法在Java中做到这一点?我可以做一系列 if 语句来检查类型,但可能有更好的方法来做到这一点。
查看完整描述

3 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

您始终可以将数组包装在一个实现的对象中List<List<Integer>>,然后将其视为矩阵。


private static class Matrix extends AbstractList<List<Integer>> implements List<List<Integer>> {

    final int[][] data;


    private static class Row extends AbstractList<Integer> implements List<Integer> {

        final int[] row;


        public Row(int[] row) {

            this.row = row;

        }


        @Override

        public Integer get(int index) {

            return row[index];

        }


        @Override

        public int size() {

            return row.length;

        }

    }


    public Matrix(int[][] data) {

        this.data = data;

    }


    @Override

    public List<Integer> get(int index) {

        return new Row(data[index]);

    }


    @Override

    public int size() {

        return data.length;

    }

}


public List<List<Integer>> asMatrix(int[][] data) {

    return new Matrix(data);

}


private void test() {

    int[][] test = new int[][] {

            {1,2,3},

            {4,5,6},

            {7,8,9}

    };

    List<List<Integer>> matrix = asMatrix(test);

    System.out.println(matrix);

}

这种方法可以扩展为允许仅通过set在内部Row类中实现来写回内部数组。扩展Matrix以允许get(row,col)方法将是微不足道的。


您需要为需要处理的每个原语编写其中之一。


查看完整回答
反对 回复 2021-07-29
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

为了速度和紧凑性,我们中的许多人在原始类数组的顶部添加了一个矩阵访问器垫片。例如(伪代码)


  int data[WIDTH*HEIGHT]; // populate it

  int at(int x, int y) { return data[y*WIDTH+x]; }


查看完整回答
反对 回复 2021-07-29
  • 3 回答
  • 0 关注
  • 265 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信