Java 如何按哈希数使用已存在的对象
代码应该检查是否有半径相同的圆,如果有,返回已经存在的圆。半径是关键。我不想创建新的圆,但要使用现有的圆Java 如何按哈希数使用已存在的对象,java,Java,代码应该检查是否有半径相同的圆,如果有,返回已经存在的圆。半径是关键。我不想创建新的圆,但要使用现有的圆 public Circle buildCircle(int radius) { for (Map.Entry<Integer, Circle> circleEntry : circles.entrySet()) if (circleEntry.getKey() == radius) { return circleEntry.ge
public Circle buildCircle(int radius) {
for (Map.Entry<Integer, Circle> circleEntry : circles.entrySet())
if (circleEntry.getKey() == radius) {
return circleEntry.getValue();
}
//if circle with given radius doesn't exist create that circle
Circle put = new Circle(radius);
return put;
}
Circle put=new Circle(radius)
我猜是有问题。如果出现“缓存未命中”,您忘记将创建的对象放入地图中。因此缓存映射保持为空:
Circle put = new Circle(radius);
circles.put(radius, put); // This one was missing!
return put;
从Java 8开始,您可以使用Map.computeIfAbsent
来避免样板代码,整个方法将成为一行:
public Circle buildCircle(int radius) {
return circles.computeIfAbsent(radius, Circle::new);
}
“相同半径”与散列数不同。我将使半径部分成为
equals()
检查的一部分。换句话说,如果两个对象是相同的,您只需进行标准检查,没有什么特别之处。用这种方法试试,不使用散列号,看看它是否能按您想要的方式工作。您可以使用散列集来存储Cirlce对象。确保Circle类的equals和hashcode方法将半径作为相等参数。Circle put是否正确?这是把某物放在地图上的正确方法吗?
public Circle buildCircle(int radius) {
return circles.computeIfAbsent(radius, Circle::new);
}