Java对象引用还是标识符?

Java对象引用还是标识符?,java,Java,我目前正在创建一个大项目,因此,我希望所有的工作都进行得非常好,尽可能高效 在我的项目中,我有一个名为Teams的类,它包含团队对象的HashMap(Integer,Team)。团队的每个实例都有一个唯一的ID(整数) 还有一个名为Player的对象。玩家的每个实例都可以分配给一个团队(但并不总是如此) 现在,我想知道最好的方法是什么,以了解球员被分配到哪个团队: ->将团队ID存储在Player(private int team)中,然后使用此ID从团队中的HashMap获取团队 ->在Pla

我目前正在创建一个大项目,因此,我希望所有的工作都进行得非常好,尽可能高效

在我的项目中,我有一个名为Teams的类,它包含团队对象的HashMap(Integer,Team)。团队的每个实例都有一个唯一的ID(整数)

还有一个名为Player的对象。玩家的每个实例都可以分配给一个团队(但并不总是如此)

现在,我想知道最好的方法是什么,以了解球员被分配到哪个团队:

->将团队ID存储在Player(private int team)中,然后使用此ID从团队中的HashMap获取团队

->在Player(私人团队)中存储对团队的引用

有人知道哪一个更好吗?每个人最重要的优点、缺点和危险是什么


谢谢

使用私人团队!除非有充分的理由,否则其他类不需要知道对象的ID。不要用Java实现数据库结构。Java被设计成基于对象的,这样使用它

您应该持有团队实例还有几个其他原因:

  • 我们可以假设您的玩家需要访问团队对象。拥有实例比执行查找更好
  • 如果您保留ID而不是实例,则可能没有对所保留对象的任何引用,并且可能会对其进行垃圾收集。我知道这可能不会发生在你的情况下,因为你拥有一张地图上的所有团队,但这仍然是一个风险,因此应该避免

  • 你在使用数据库吗?如果是这样,请将团队的ID存储在player中,否则我建议您存储团队的引用。

    显然,在不知道使用它的上下文的情况下,不可能确定地说,但是从代码设计的角度来看,“自然”的预期是团队包含玩家,因此,是团队引用玩家对象,而不是相反


    如果你开始乱搞ID,需要存储大量不同的对象,听起来你想要的是更多的数据库,在这种情况下,如果你不想跳出Java,可以看看HSQLDB之类的东西。

    将对象引用用作HashMap(或任何映射)中的键的潜在危险在于它可以,如果操作不当,将导致内存泄漏

    如果仍然存在对对象的引用,则不会对其进行垃圾收集。如果用作地图中的关键点,则视为对该对象的引用

    你可以绕过这个


    在您描述的情况下,您可能应该使用对象作为键,但要注意上述情况。

    私人团队是您提到的两种方法之间的一种选择。如果您存储了Id,那么如果HashMap随之更新会发生什么?这造成了不必要的依赖

    这完全取决于您的用例。与其孤立地设计类,不如尝试设计功能的垂直部分。谢谢你提供的信息。我还有一个问题:对一个对象的引用需要多少内存?@lnsdeath不足以担心-现在不要担心这样的性能细节。你以后会知道你是否需要的-我不同意。仅仅因为后台有一个DB,并且表正在使用一个ID,就没有理由在对象中使用ID。有很多ORM解决方案(Hibernate)使这变得容易。因此,我发现我之前说的不是那么“正确”,而且,是的,这取决于…不,我不使用引用作为映射中的键-我只使用整数来标识对象,所以这不应该是一个问题。啊,我误解了这个问题。。。提示:始终使用代码示例。;-)我认为它需要双向连接。球队将持有球员名单,球员将持有球队。我想很容易地确定一个球队有多少球员,以及一个球员在哪个球队。