检查HashMap <object,string> </object,string>的值

时间:2015-01-17 01:57:07

标签: java hashmap java-collections-api

我有一个IntPair类,它有两个我使用的方法:&#34; getFirst()&#34;和&#34; getSecond()&#34;。虽然在我目前正在使用的这种方法中,我想检查是否&#34; hashMap j&#34;包含特定值,然后执行操作。我想我有这些问题:

Object obj = j.values();
t.moveCursor(((IntPair)obj).getFirst(), ((IntPair)obj).getSecond());

我不知道我是否向对象投射,或者如果第一行&#34;对象obj = j.values()&#34;应该用另一个方法调用替换。 我在j.containsValue(&#34; 0&#34;)之后使用System.out.print(&#34; Message&#34;)进行了测试,然后我收到了消息。

这是我试图让它发挥作用的方法的一部分。

public static HashMap<IntPair, String> j = new HashMap<>();

j.put(new IntPair(firstInt, secondInt), value);
if (j.containsValue("0"))
{
Object obj = j.values();
t.moveCursor(((IntPair)obj).getFirst(), ((IntPair)obj).getSecond());
t.putCharacter('x');
}
else if (j.containsValue("1"))
{
Object obj = j.values();
t.moveCursor(((IntPair)obj).getFirst(), ((IntPair)obj).getSecond());
t.putCharacter('v');
}

IntPair类:

public class IntPair {
private final int first;
private final int second;

public IntPair(int first, int second) {
    this.first = first;
    this.second = second;
}

@Override
public int hashCode() {
    int hash = 3;
    hash = 89 * hash + this.first;
    hash = 89 * hash + this.second;
    return hash;
}

@Override
public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final IntPair other = (IntPair) obj;
    if (this.first != other.first) {
        return false;
    }
    if (this.second != other.second) {
        return false;
    }
    return true;
}

public int getFirst() {
    return first;
}

public int getSecond() {
    return second;
}
}

任何帮助都会非常感激。谢谢!

2 个答案:

答案 0 :(得分:1)

您编写的代码存在很大问题  在行

t.moveCursor(((IntPair)obj).getFirst(), ((IntPair)obj).getSecond());

表达式

((IntPair)obj).getFirst() 

不会返回getFirst值,因为obj不是IntPair类型,而obj是由

返回的元素IntPair的集合
Object obj = j.values();

所以你必须从这个集合中检索IntPair元素然后你可以读取getFirst() 我写了一个小程序来说明我的观点

public static HashMap<IntPair, String> j = new HashMap<IntPair, String>();

    public static void main(String[] args) {
        j.put(new IntPair(2, 3), "0");
        if (j.containsValue("0")) {
            Set<Entry<IntPair, String>> pairs = j.entrySet();
            Iterator<Entry<IntPair, String>> it = pairs.iterator();
            Entry e;
            while (it.hasNext()) {
                e = it.next();
                if (e.getValue().equals("0")) {
                    IntPair resultObj = (IntPair) e.getKey();
                }
            }

        }
    }

答案 1 :(得分:0)

请注意,values()方法返回值对象的集合,此处为字符串集合。你不能把这个转发给IntPair,我很惊讶你的尝试不会导致编译错误。