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);
}
}