Bev*_*vor 5 java search hashmap
您好,
如果您搜索HashMap<String,String>
键值对的特定值,则可以编写以下内容:
myHashMap.containsKey(myString);
Run Code Online (Sandbox Code Playgroud)
但是,如果密钥不是字符串,我该如何管理呢?我有一个看起来像这样的课:
public class Kategorie implements Comparable {
private String name;
public Kategorie() {
super();
}
public Kategorie(String name) {
setName(name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Object o) {
if (!(o instanceof Kategorie))
throw new ClassCastException();
Kategorie k = (Kategorie)o;
String name = k.getName();
return this.getName().compareTo(name);
}
}
Run Code Online (Sandbox Code Playgroud)
在地图中,我保存了此类型"Kategorie"的键和值.
mapKategorieDEundEN.put(new Kategorie(strName_de), new Kategorie(strName_en));
Run Code Online (Sandbox Code Playgroud)
稍后在代码中,我想检查是否存在具有特定字符串的键.
if (mapKategorieDEundEN.containsKey(searchString)) {
Run Code Online (Sandbox Code Playgroud)
...不起作用,因为键不是字符串而是"Kategorie",这很清楚.
然后我尝试了这样的事情:
if (mapKategorieDEundEN.containsKey(new Kategorie(searchString))) {
Run Code Online (Sandbox Code Playgroud)
......也行不通.我认为它没有找到任何东西,因为该对象不是"原始"对象而是新对象.
在这种情况下,我可以使用containsKey还是必须在HashMap上使用循环?
你的类应该覆盖equals和hashCode,之后它会工作.
HashMap/Hashtable通过使用键的hashCode将项放入"桶"中,因此表示与另一个对象相同的值的新对象应该被视为同一个对象,该对象必须返回相同的hashCode.返回相同hashCode的所有键将被视为候选,并且将在它们上调用equals.如果equals返回true,则认为匹配.