gpt4 book ai didi

java - 在java中实现一个不透明的句柄

转载 作者:行者123 更新时间:2023-12-04 05:11:20 26 4
gpt4 key购买 nike

我想在java中实现一个不透明的句柄。

即,当用户在我的 Factory 类上调用 Create 时,我创建了该类的一个对象,但不返回该对象本身,而是返回一个表示该类实例的 int。我会有一个 HashMap它将 int 存储为键,将对象存储为值。
该类的所有其他方法都将一个 int 作为一个参数,并且它将从 HashMap 中检索对象。并对相应的对象进行所需的操作。
将有一个删除方法将其从 HashMap 中删除。并允许它被垃圾收集。

我想知道是否有任何现有的类/数据结构可以避免我必须实现代码的句柄部分?

我不认为我可以使用 hashCodeidentityHashCode作为唯一标识符,因为不能保证它们是唯一的。

如果我自己实现了一个运行计数器,我将不得不在创建唯一 ID 时处理线程安全等问题,当我从 hashMap 中删除对象时重用 ID。等等。所以我想知道是否有任何现有的类(class)可以帮助解决这个问题。

最佳答案

让我们做简单的计算。你说你最多有 10000 个对象,最多 1 小时的存活时间。让我们假设更艰难的条件 - 每 1 分钟 10000 个对象。 32 位整数足以使用大约 1 年。此外,即使整数溢出,它也会再次从零开始,重复使用 1 年前使用的整数。在我看来,这已经绰绰有余了。因此,只需使用 AtomicInteger 它的工作速度非常快,并且足以满足您的要求。

如果你仍然有疑问,你可以有一个更有弹性的解决方案 - 当一个新的句柄生成时,首先检查 HashMap 是否已经有这个键(这是非常快的操作),如果有,只需选择下一个整数。它类似于 https://superuser.com/questions/135007/how-are-pids-generated在操作系统中。

关于java - 在java中实现一个不透明的句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14892917/

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