gpt4 book ai didi

Java - 具有相同引用的对象池

转载 作者:行者123 更新时间:2023-12-01 16:52:05 25 4
gpt4 key购买 nike

作为一个简单的个人练习,我想要执行以下操作:

  • 创建一个类,它表示单个整数值
  • 在任何时刻都不应该存在具有相同整数值的此类的两个对象

这就是我解决问题的方法:

public class MyClass {

// Static pool
private static HashSet<MyClass> pool;

// Integer value each object holds
private int value;

static {
pool = new HashSet<MyClass>();
}

// private Constructor
private MyClass(int value) {
this.value = value;
}

// Static public method to create MyClass objects
public MyClass create(int value) {
// Create tmp object with private constructor
MyClass tmp = new MyClass(value);

// At this point I want to check, whether an object with the
// same integer value exists in the HashSet.
// If this is the case I would like to return a reference to
// the object in the HashSet (the GC will remove tmp).
// Otherwise I would like to add tmp to the HashSet and return
// a reference to tmp.
}

}

问题的一部分是作为上面发布的代码中的注释的一部分编写的。我对以下事情感到好奇。如果我不覆盖 equals(Object obj)pool.contains(tmp) 将始终返回 false(因为默认的 equals(Object obj) code> 继承自 Object 测试以供引用。我可以覆盖 equals(Object obj) 来比较对象的 value 字段,但是如何我可以从 HashSet 中获取引用来返回它吗?

我需要使用 hashcode() 执行任何操作吗?

最佳答案

假设您使用的是 Java 8,请使用 Map<Integer, MyClass> :

private static Map<Integer, MyClass> map = new HashMap<>();

然后,在你的方法中:

public MyClass create(int value) {
synchronized (map) {
return map.computeIfAbsent(value, MyClass::new);
}
}

关于Java - 具有相同引用的对象池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38191067/

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