web-dev-qa-db-ja.com

キー名に応じてHashMapから文字列値を取得する

さまざまなキーと値を持つHashMapがありますが、1つの値を取得する方法を教えてください。

私はmy_codeと呼ばれるマップ内のキーを持っています、それは文字列を含むべきです、どのように私はマップを通して繰り返す必要なしにそれを得ることができますか?

これまでのところ私は持っています..

   HashMap newMap = new HashMap(paramMap);
   String s = newMap.get("my_code").toString();

"ABC"や "DEF"のようなStringが最初にそこに置かれるのを期待していますが、System.out.println()を実行するとJava.lang.string#F0454のようになります

すみません、私はあなたがおそらく推測することができるように私はあまり地図に精通していません;)

114
Jimmy

Map#get(key) を使うだけです。

Object value = map.get(myCode);

これが地図に関するチュートリアルです、あなたはそれが役に立つと思うかもしれません: http://Java.Sun.com/docs/books/tutorial/collections/interfaces/map.html

編集:あなたは次の質問を編集しました。

"ABC"や "DEF"のような文字列が最初に表示されるのではないかと期待していますが、System.out.println()を実行すると何かが得られます。 Java.lang.string#F0454のように

申し訳ありませんが、おそらく私が推測できるように、私はマップにはあまり慣れていません;)

あなたは Object#toString() の結果を見ています。しかし、Java.lang.Stringという名前の小文字のsを使用してカスタム実装を作成した場合を除き、Java.lang.stringにはすでに実装済みのはずです。それが実際にカスタムオブジェクトである場合、目的のオブジェクトに対してObject#toString()またはSystem.out.println()を実行するたびにtoString()をオーバーライドして「可読文字列」を取得する必要があります。例えば:

@Override
public String toString() {
    return "This is Object X with a property value " + value;
}
157
BalusC

キー/値を文字列として保存している場合、これはうまくいきます。

HashMap<String, String> newMap = new HashMap<String, String>();
newMap.put("my_code", "shhh_secret");
String value = newMap.get("my_code");

問題はHashMapに入力されるもの(キーと値)です。

55
jeff porter

Genericsを使用してマップを次のように定義するとします。

Map<String,String> map = new HashMap<String,String>();

次に値を取得する

 String s = map.get("keyStr"); 

map.get()を型キャストしたり、toStringメソッドを呼び出して文字列値を取得する必要はありません。

11

あなたの質問は、私が恐れていることはまったく明らかではありません。キーには「名前」はありません。マップに関する限り、それは「呼ばれる」ものではありません - それは単なるキーであり、他のキーと比較されます。あなたがたくさんの異なる種類のキーを持っているならば、私はあなたが正当性のためにあなたがそれらを異なるマップに入れることを強く勧めます。

これで解決しない場合は、質問を明確にしてください - できればあなたが何を意味しているのかを示すためにいくつかのコードを使ってください。

9
Jon Skeet

map.get(myCode)

6
abyx

ここで注意すべき重要な点は、あなたのキーがJavaのユーザ定義クラスのオブジェクトである場合、equalsメソッドをオーバーライドすることをポイントにすることです。 HashMap.get(Object key)メソッドはキー値の照合にequalsメソッドを使用するためです。 equalsメソッドをオーバーライドしない場合は、keyの実際の値ではなく、単にキーの参照に基づいて値を見つけようとします。その場合は常にnullが返されます。

6
Sreeja Mohan

あなたがHashMapを次のように宣言したとします -

HashMap<Character,Integer> hs = new HashMap<>();

その後、map in keyはCharacter型のデータ型とint型の値になります。キーの型、値の型に関係なくkeyに対応する値を取得するには、構文は次のようになります。

    char temp = 'a';
    if(hs.containsKey(temp)){
`       int val = hs.get(temp); //val is the value corresponding to key temp
    }

そのため、あなたの質問に応じて、キーに対応する文字列値を取得します。このためには、HashMapを「HashMap <"データ型のキー"、 "データ型の値" hs = new HashMap <>();これを使うことはあなたのコードをきれいにするでしょう、そしてまたあなたがエントリー時に文字列として値を保持していればデフォルトでそれが文字列の値を返すのでhs.get( "my_code")の結果を文字列に変換する必要はありません。

2
Gaurav Sachdeva

HashMapのget(Object key)メソッドを使うことができます。多くの場合、Mapキーにとって便利なクラスになるために、Key Classはequalsメソッドをオーバーライドする必要があります。

0
raffael