首页 > 解决方案 > 当 Key 是自定义类对象时,如何使用 String 从 HashMap 中检索值?

问题描述

我有一张HashMap<CustomClass1, ArrayList<CustomClass2>>叫地图。

是否可以ArrayList<CustomClass2>使用 CustomClass1 中包含的字符串?例如我想说map.get("zone1")并得到匹配的ArrayList。这是一个学校项目,我必须使用上面描述的 HashMap。这类似于我的代码:

public class Main {
   public static void main(String [] args) {
      HashMap<CustomClass1, ArrayList<CustomClass2>> map = new HashMap<CustomClass1, ArrayList<CustomClass2>();

      CustomClass1 example = new CustomClass1("zone1");

      map.put(example, new ArrayList<CustomClass2>());

      //Later in the code where I don't have the objects in scope (except for map)...
      ArrayList<CustomClass2> value = map.get("zone1");

   }

   class CustomClass1 {
      private final String name;
      //Additional variables

      public CustomClass1 (String name) {
         this.name = name;
      }

      @Override
      public int hashCode() {
         return name.hashCode();
      }

      @Override
      public boolean equals(Object obj) {
         ...
         String test = (String) obj;
         if(test.equals(this.name))
            return true;
         ...
      }
   }
}

到目前为止,我已经尝试在我的 CustomClass1 中覆盖 hashCode() 和 equals() 方法,以便它使用字符串的 hashCode。据我了解,当我调用 map.get(obj) 方法时,它调用 obj.hashCode() 来查找正确的存储桶,然后调用 obj.equals() 来查看它是否是正确的对象。我认为我的想法是错误的,因为我不断得到空值,而 CustomClass1 中的 equals() 方法永远不会被调用。

请参阅解决方法/解决方案的评论。

标签: javahashmapequalshashcode

解决方案


推荐阅读