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

Java中如何让数据结构持有另一数组值的引用?(数独求解器场景)

数独网格与逻辑单元自动同步的实现方案

1. 自定义可变整数包装类

Java自带的Integer是不可变类,无法实现共享引用后的自动更新,我们可以自己实现一个简单的可变int容器,让多个逻辑单元共享同一个实例:

public class MutableInt {
    private int value;

    public MutableInt(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }
}

适配你的数独结构

  • 网格改为MutableInt[][] grid = new MutableInt[9][9];,初始化时每个单元格实例化为new MutableInt(0)
  • SudokuRow等子类的values数组直接引用网格对应位置的MutableInt实例:
    // SudokuRow构造示例
    public SudokuRow(int rowIdx, MutableInt[][] grid) {
        this.values = new MutableInt[9];
        for (int col = 0; col < 9; col++) {
            values[col] = grid[rowIdx][col];
        }
    }
    

修改数字的逻辑

调用insertDigit时直接修改MutableInt的内部值,所有关联的逻辑单元会自动同步:

public void insertDigit(int row, int col, int digit) {
    grid[row][col].setValue(digit);
}

2. 视图模式:按需从网格读取数据

放弃在逻辑单元中存储values数组,改为在需要数据时直接从原网格读取,彻底避免同步问题:

public class SudokuRow extends SudokuSet {
    private final int rowIndex;
    private final int[][] grid;

    public SudokuRow(int rowIndex, int[][] grid) {
        this.rowIndex = rowIndex;
        this.grid = grid;
    }

    // 获取单个位置的值
    public int getCell(int col) {
        return grid[rowIndex][col];
    }

    // 获取整行数据(按需生成)
    public int[] getValues() {
        int[] rowValues = new int[9];
        System.arraycopy(grid[rowIndex], 0, rowValues, 0, 9);
        return rowValues;
    }
}

这种方式无需维护任何同步逻辑,所有数据始终与原网格保持一致。数独9×9的规模极小,按需生成数组的性能开销完全可以忽略。

3. 基于NIO IntBuffer的连续单元视图

如果你的网格可以转为一维数组存储(int[] flatGrid = new int[81];,通过row*9+col定位单元格),可以用IntBuffer创建连续单元的共享视图:

// 创建某一行的共享视图
IntBuffer rowBuffer = IntBuffer.wrap(flatGrid, rowIdx*9, 9);
// 创建某一宫的共享视图(比如第0宫)
IntBuffer boxBuffer = IntBuffer.wrap(flatGrid, 0, 9);

但这种方法仅适合行、宫这类连续的单元,列的元素在一维数组中是非连续的,无法直接用IntBuffer创建视图,因此实用性不如前两种方案。


方案选择建议

  • 习惯C++指针逻辑的话,自定义MutableInt最贴合你的需求,实现"引用式同步"
  • 追求代码简洁性,视图模式是最优解,完全消除同步维护成本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:05:00