java - 以对象为键的映射

标签 java dictionary

我想创建一个以某个类作为键的 map 。我遇到的问题是,由于此类包含指针,如果我使用 HashMap,则在散列时将使用此地址(请参阅下面的代码)。我怎样才能让它比较实际值而不是地址,或者我可以使用其他一些容器来实现相同的结果吗?

import java.util.*;
public class Main {
    public static void main(String args[]) {
        class Foo {
            public Foo(String a) {s = a;}
            public String s;
        }

        HashMap<Foo,Integer> a = new HashMap<Foo,Integer>();
        a.put(new Foo("test"), 1);
        System.out.println(a.get(new Foo("test")));
    }
}

这输出null

最佳答案

为了使用类的实例作为 HashMap 中的键你需要覆盖它的 hashCodeequals方法。一旦你这样做了,一切都会正常工作。

class Foo {
    public Foo(String a) {s = a;}
    public String s;
    int hashCode() {return s.hashCode();}
    boolean equals(Object other) {
        if (other == this) return true;
        if (!(other instanceof Foo)) return false;
        return ((Foo)other).s.equals(s);
    }
}

关于java - 以对象为键的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10778532/

相关文章:

java - 空字段正在发送到数据库

java - Axon - 多个节点和多个数据库的重复段声明/未声明段

java - Mockito 单元测试用例调用不明确(需要使其不明确)

c# - 为什么 File.WriteAllText 不将数据写入文件?

python - 在 pandas、OOP 类和字典之间进行选择 (Python)

java - 这是发送给多个客户端的正确方法吗?

java - 我们应该在 Selenium WebDriver 中使用哪些设计模式?

java - 如何在java中动态实例化异步服务 worker

dictionary - 如何将 SVG 转换为 SHP(形状文件)格式?

mysql - 创建一个具有多个值到一个键的数据库