gpt4 book ai didi

java - java中对象的内存分配一次还是每次实例化时分配

转载 作者:行者123 更新时间:2023-11-30 03:36:36 26 4
gpt4 key购买 nike

我编写了一个小程序来保存我的 X 和 Y 值。这是我的代码:

public class ChartData 
{
private Object x, y;

public ChartData(Object x, Object y)
{
this.x = x;
this.y = y;
}

public Object getX()
{
return x;
}

public Object getY()
{
return y;
}

public boolean equals(Object obj)
{
if (obj != null && obj instanceof ChartData)
{
final ChartData other = (ChartData) obj;
if (this.getX().equals(other.getX()) && this.y == null && other.y == null)
{
return true;
}
else if (this.getX().equals(other.getX()) && this.y.equals(other.y))
{
return true;
}
}
return false;
}

public int hashCode()
{
int hashCode = getX().hashCode();
hashCode = (y != null) ? hashCode + y.hashCode() : hashCode ;
return hashCode;
}
}

我想对 ChartData 对象的值求和(即它保存 X 和 Y 值)。例如:-

LinkedHashMap<ChartData, Object> datasource = new LinkedHashMap<ChartData, Object>();
while(data.next())
{
Object x = data.getValue(1);
Object y = data.getValue(2);
Double value = data.getValue(3);
ChartData cateVal = new ChartData(x, y);
Double currentValue = (Double) datasource.get(cateVal);
if(currentValue != null)
{
datasource.put(cateVal, currentValue + value);
}
else
{
datasource.put(cateVal, value);
}
}

有机会为相同的 X 和 Y 值创建一个新对象。它实际上是为每个实例化创建一个新对象,还是使用之前创建的内存。请解释一下。

最佳答案

您的 HashMap 键,即 ChartData cateVal = new ChartData(x, y); 每次都会创建一个新对象它被称为。

没有自动内存管理,我不认为有任何方法可以使用 HashMap 来克服这个问题,但你不应该担心它,创建这样的对象非常便宜。

我不知道一般情况下是否可以从 (X, Y) -> Z 获得映射,其中 X 和 Y 是任意的对象,而不创建包含 (X, Z) 的对象。 Java 中的映射是从单个对象到对象的。如果 X 和 Y 是整数,或者可以映射到整数,则可以创建一个由 X 和 Y 索引的数组 Z[][]。在这种情况下,这意味着 CharData 中的 x 和 y 应该是整数,我假设什么你想要:

Object z = datasource[x][y];
if (z == null) {
z = new ChartData(x,y);
datasource[x][y] = z;
}

关于java - java中对象的内存分配一次还是每次实例化时分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27762673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com