die*_*end 0 java string hashtable equals hashcode
我需要一个基于密钥的Someclass值.键可以是字符串,布尔值或其他对象,这就是我使用Object作为键的原因.但是当对象是一个字符串时,我有一个问题.我有两个对象的字符串,它是等于,但它应该返回不同的值,因为它是一个不同的对象.
我的代码:
Object k = new String("action");
Object l = new String("action");
Hashtable<Object,SomeClass> map = new Hashtable<Object, SomeClass>();
map.put(k,anObject1);
map.put(l,anObject2);
map.remove(k); // it is removing both with k and l.
Run Code Online (Sandbox Code Playgroud)
当我检查两个对象的hashCode()时,它返回相同的值,这最终不是我想要的.
这有什么解决方案吗?我是否需要创建一个覆盖对象的Equals()的新类?但是,仍然是hashCode.:(问题是我需要一个hashCode,为不同的Object返回不同的值.
编辑:我这样做是因为我需要根据字符串的内容执行不同的操作,但操作将因map与键返回的值而不同.
更新:好的,这就是为什么我需要这个奇怪的事情.
我有一个玩家实例和3个陆地实例.所以我希望玩家能够耕种land1,land2,land3.如果玩家想要耕种土地,那个土地会形成一个正在运行的线程,告诉玩家移动到位置X,完成工作action,并wait()通过对象action,当另一个线程按照notify对象线程时action,土地然后自行修改.然后玩家根据对象制作动画action.我正在ArrayList<Position> destination和'ArrayList action`拥有它.也许你可以在这里阅读我的其他问题.
所以我想让动作取消.我通过传递action对象来实现它.我有一个按钮,显示每个动作,每个按钮将取消该动作.我也经过action这里.因此,当我点击按钮时,土地将获得notify.问题是我无法通过ArrayList<Position>删除目的地Action,因为它不知道索引在哪里.我是Java的新手,但是我一直在使用C++,所以我考虑使用Hashtables,因为它的O(1)与C++ O(log n)不同,并且因为我当前代码没有太多变化,所以很方便.
这可以理解吗?
您可以使用IdentityHashMap,但如果您可以解释您在这里尝试做什么,可能会有所帮助.这不是一个非常普遍的要求,除非你有一些很好的理由要做到这一点,否则你可能还有其他的事情要做得更好.
顺便说一下,a Map只能为一个键保存一个值.所以在你第二次打电话之后map.put,你放在那里的第一个价值已经消失了.
编辑:
好的,我已经阅读了你的解释......好吧,我还不完全清楚你在做什么.这是我对你所说的最好的猜测:
String.String"犁" 实例映射到Position3个不同的土地的s.如果这个(或类似的东西)是你想要做的,这是我的想法:
String不应该是唯一的......"犁"是"犁",无论它在哪个地方完成.什么是独特的是像"犁",而行动是要在完成土地行动的组合.enum或类似的来表示动作类型可能是好的.Action类应该包含一个"动作类型"和一个Position.当您单击取消该操作时Action,您可以获得所需的数据.| 归档时间: |
|
| 查看次数: |
2243 次 |
| 最近记录: |