は、私は私がやりたいことはDrink.nameに渡された文字列を比較するハッシュマップのためのgetメソッドを持っているし、彼らがある場合はそうハッシュマップのキーと異なるパラメータを持つハッシュマップのコマンドを取得しますか?
// In the main function
HashMap<Drink, boolean> drinkMap = new HashMap<>();
// What I would like to be able to do:
drinkMap.get("beer");
// My drink Class which is used as the key
public class Drink implements Comparable<String> {
private String name;
private String info;
public String getName() {
return Name;
}
public Drink(String name, String info) {
this.name = name;
this.info = info;
}
}
ように私のハッシュマップで私のキーとしてカスタムクラスを持っています同じものがhashmapエントリを返しますが、これを動作させる方法を理解することはできません。
私はそうのような私のドリンククラスのequalsとhashCodeメソッドを実装してみました:
@Override
public int hashCode() {
return Name.hashCode();
}
@Override
public boolean equals(Object o) {
return o instanceof String && o.equals(Name);
}
をしかし、私はhashMap.get(「ビール」)を行うだろうというとき、それは私がそこに存在することがわかっているにもかかわらず、nullを返し保持しました地図で「ビール」という名前のオブジェクトを飲む。
なぜあなたはキーとして名前を使用していませんか? – shmosel
'HashMap'のソースを見るのに2分かかった場合、これは決してうまくいかないでしょう。それが明らかでない場合は、ステップデバッガは苦痛をなくします。 –
あなたに完全に正直ではない理由はありません。ブール値がDrinkクラスの一部であるか、2つのマップを使用するように、リファクタリングすることができます。しかし、もしこれがうまくいくとすれば、それはよりシンプルに終わってしまうかもしれないと思った...そうではないことを認識し始めた。 –