Java:如何为具有自定义类型的hashmap创建getter/setter方法?

Java:如何为具有自定义类型的hashmap创建getter/setter方法?,java,matrix,Java,Matrix,我有一个稀疏矩阵实现: 我正试图根据单个元素的键为它们编写getter/setter方法,但我不确定如何使用自定义类型坐标来实现这一点。例如,theMatrix.get(坐标)(通常的方式)不起作用 有人能告诉我怎么做吗?在矩阵类之外无法访问类坐标。 事实上,这是一个您不想让最终用户看到的实现细节。请检查下面示例中的getter和setter 如果仍然希望最终用户可以使用坐标类,则需要将其公开 公共类矩阵 { 私有静态类坐标 { 私有整数x=0; 私有整数y=0; 私有整数数据=0; 公共坐标

我有一个稀疏矩阵实现:

我正试图根据单个元素的键为它们编写getter/setter方法,但我不确定如何使用自定义类型坐标来实现这一点。例如,
theMatrix.get(坐标)
(通常的方式)不起作用


有人能告诉我怎么做吗?

在矩阵类之外无法访问类坐标。 事实上,这是一个您不想让最终用户看到的实现细节。请检查下面示例中的getter和setter

如果仍然希望最终用户可以使用坐标类,则需要将其公开

公共类矩阵 {

私有静态类坐标
{
私有整数x=0;
私有整数y=0;
私有整数数据=0;
公共坐标(最终整数x,最终整数y)
{
这个.x=x;
这个。y=y;
数据=((x+)+(y+).hashCode();
}
@凌驾
公共布尔等于(最终对象obj)
{
if(obj实例坐标)
{
座标座标=(座标)obj;
返回((x==坐标.x)和&(y==坐标.y));
}
其他的
{
返回false;
}
}
@凌驾
公共int hashCode()
{
返回数据;
}
}
私人int numrows;
私人国际专栏;
私有哈希映射矩阵;
公共矩阵(最终整数行、最终整数列)
{
this.numrows=numrows;
this.numcolumns=numcolumns;
}
公共矩阵(哈希映射矩阵扩展数据)
{
theMatrix=新哈希映射(matrixdata);
}
公共双get(int行、int列、双defaultValue)
{
Double ret=矩阵get(新坐标(行、列));
return ret!=null?ret:defaultValue;
}
公共无效集(整数行、整数列、双值)
{
矩阵put(新坐标(行、列)、值);
}
}

它是如何工作的?风格建议:我会避免使用与您试图操作的类同名的变量<代码>坐标=(坐标)obj让我头疼。至少尝试将其小写:
Coordinates=(Coordinates)obj
theMatrix.get(坐标)大写C是一个类名,而不是一个对象。我看到你混合了它,例如在equals()中,它不起作用,因为在Index中不能解析为变量。
    private static class Coordinates
    {

        private int x = 0;
        private int y = 0;
        private int data = 0;

        public Coordinates(final int x, final int y)
        {
            this.x = x;
            this.y = y;
            data = ((x + "") + (y + "")).hashCode();
        }

        @Override
        public boolean equals(final Object obj)
        {
            if (obj instanceof Coordinates)
            {
                Coordinates Coordinates = (Coordinates) obj;
                return ((x == Coordinates.x) && (y == Coordinates.y));
            }
            else
            {
                return false;
            }
        }

        @Override
        public int hashCode()
        {
            return data;
        }
    }

    private int numrows;
    private int numcolumns;
    private HashMap<Coordinates, Double> theMatrix;

    public Matrix(final int numrows, final int numcolumns)
    {
        this.numrows = numrows;
        this.numcolumns = numcolumns;
    }

    public Matrix(HashMap<Coordinates, Double> matrixdata)
    {
        theMatrix = new HashMap<Coordinates, Double>(matrixdata);
    }

    public Double get(int row, int col, double defaultValue)
    {
        Double ret = theMatrix.get(new Coordinates(row, col));
        return ret != null ? ret : defaultValue;
    }

    public void set(int row, int col, Double value)
    {
        theMatrix.put(new Coordinates(row, col),  value);
    }
}