【发布时间】:2012-06-24 09:27:30
【问题描述】:
我正在尝试编写一个服务器,它使用HashMap<ClientID,Client> 通过唯一生成的 ID 跟踪其客户端。这个想法是,如果我是管理员并且我想将某人从服务器上启动,我会查找适当的 ClientID(这实际上只是一个字符串;唯一的区别是 ClientID 类的工作是确保没有两个客户端是曾经为该客户端分配了相同的 ID),然后输入诸如“kick 12”之类的命令(如果我想踢的人的 ClientID 恰好是 12)。
我认为这会起作用,因为我认为 HashMap 可能是由从 Object 继承的 hashCode() 方法的内部使用支持的,并且我以支持必要查找操作的方式设计了 ClientID 类,假设这是真的。但显然,事实并非如此——具有相同哈希码的两个键显然不被认为是HashMap(或HashSet)中的相同键。
我创建了一个使用HashSet 的简单示例来说明我想要做什么:
使用此代码,不可能(据我所知)产生输出
成功了! Set 已经包含该 ID :)
... 相反,它只会继续向该集合添加值,即使这些值是重复的(也就是说,它们与 equals 方法相等并且它们具有相同的哈希码)。如果我没有很好地沟通,请自己运行代码,我想你会很快明白我的意思......这使得查找变得不可能(这也意味着 Client.generateNew 方法根本不像我想要的那样工作它到);我该如何解决这个问题?
【问题讨论】:
-
有一点是肯定的,构造函数应该是私有的
-
它是私有的,在我的原始代码中(超过 1000 行,所以我不想在这里发布)。我只是为了更容易编写这个例子而将其公开,我就是这样懒惰:)
标签: java hashmap hashset lookup-tables