HashMap:使用Object作为Key并使用该键的方法

时间:2014-01-24 12:18:01

标签: java hashmap

我的HashMap目前看起来像这样:

HashMap<MyObject, Integer> hash = new HashMap<MyObject, Integer>();

无论如何,在给定hash对象的情况下访问密钥对象,从而使用密钥对象的方法?

4 个答案:

答案 0 :(得分:2)

Object作为关键类型是一个糟糕的选择。使用

的任何课程
  • 是不可变的
  • 实施正确的equalshashCode方法(重要!)

StringInteger是现成的候选人,但您也可以实现自己的密钥类,因此您应该拥有Map<UbuKey, Integer>并可以使用该密钥类的所有方法

答案 1 :(得分:0)

HashMap<MyObject, Integer> hash = new HashMap<MyObject, Integer>();
for(Map.Entry<MyObject,Integer> entry:hash.entrySet()){
 entry.getKey().yourMethod(); //access method in key
}

这样你就可以在key中访问方法了。 entry.getKey()返回MyObject这是您的关键。现在,您可以在密钥中访问该方法。

答案 2 :(得分:0)

如果您获得地图密钥,则可以使用该密钥上的方法。我的建议是将实现分配给不实现的接口:)

Map<Object, Integer> hash = new HashMap<Object, Integer>();
        hash.keySet().iterator().next().yourMethod();

但是请记住检查你的迭代器中是否有任何对象,并且你不能为它调用yourMethod。

答案 3 :(得分:0)

你可以但是如果方法来自你自己的对象而不是对象,你需要将你的地图更改为:

HashMap<MyObject, Integer> hash = new HashMap<MyObject, Integer>();
for(Map.Entry<MyObject, Integer> entry : hash.entrySet()) {
    entry.getKey().myMethod();
}

或者将Object转换为MyObject:

HashMap<Object, Integer> hash = new HashMap<Object, Integer>();
for(Map.Entry<Object, Integer> entry : hash.entrySet()) {
    ((MyObject entry.getKey()).myMethod();
}

但是我不确定HashMap是您尝试做什么的最佳选择。正如@Gyro Gearless所说,对象通常不是HashMap的关键选择。