Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何按哈希数使用已存在的对象_Java - Fatal编程技术网

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