gpt4 book ai didi

java - 查找特定实例,最好的方法是什么

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

假设我有一个类的两个实例:

public class MyClass {
public void sayHello() {
System.out.println("Hello");
}
}

a = new MyClass();
b = new MyClass();

现在我将它们添加到另一个对象,例如:

public class OtherClass {
private ArrayList<MyClass> myClsList = new ArrayList<>();

public void add(MyClass obj) {
myClsList.add(obj);
}

public void remove(MyClass obj) {
// ????
}
}

c = new OtherClass();

c.add(a);
c.add(b);

现在我想删除一个特定的实例,例如

c.remove(a);
  1. 我可以迭代它们并测试相等性吗,我的意思是这在理论上应该可行,因为这两个实例具有不同的“内部指针”?

  2. 我想使用基于 HashMap 的方法会更有效,但是我可以在那里使用什么作为键(假设我不能添加唯一的实例 ID 或其他东西)。

编辑:对于我到底想知道什么有些困惑。这里的关键是我想知道是否有任何方法可以从 c 的 ArrayList 或我可能使用的任何聚合器对象中删除该特定实例,只需提供相应的对象引用即可。我想这可以通过仅保留 ArrayList 并测试是否相等来完成(尽管我不是 100% 确定),但如果可以不遍历整个列表,它会更清晰。我只想知道在 Java 中是否可以实现类似的东西。 (我知道如何通过使用其他信息来解决这个问题,但线索是仅具有用于过滤/检索目的的相应对象引用。

最佳答案

根据 Java doc,您可以使用 a.toString() ,

The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object.

这应该为您的类实例提供一个唯一标识符,因此您可以将其用作散列键而无需存储/创建任何额外的标识符。

注意:这种做法要小心,不要依赖 `Object.toString() 返回的值,因为它与实际对象地址相关,请参阅详细说明 here .

关于java - 查找特定实例,最好的方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45777523/

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