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


123

HashMapさまざまなキーと値を持つを持っていますが、どのようにして1つの値を取得できますか?

マップにと呼ばれるキーがありますmy_code。これには文字列が含まれている必要があります。マップを反復処理することなく、それを取得するにはどうすればよいですか?

これまでのところ..

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

String「ABC」や「DEF」などのが表示されることを期待していますが、これは最初にそこSystem.out.println()に挿入したものですが、表示するとjava.lang.string#F0454

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

回答:


166

ただ使う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カスタム実装を作成しない限り、にはすでに1つ実装されているはずsですjava.lang.string。それが実際にカスタムオブジェクトでObject#toString()あるSystem.out.println()場合toString()は、目的のオブジェクト上で、またはその上でいつでもオーバーライドして、「人間が読める文字列」を取得する必要があります。例えば:

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

1
もちろん、カスタム文字列クラスを作成している場合は、(1)それを実行しないことをお勧めします。(2)実行したくない場合は、(2)実行しないでください。 java.lang名前空間。
MatrixFrog 2010

1
if HashMap <String、String> newMap = new HashMap <String、String>(); これから文字列要素を取得する方法...?ここで文字列値= newMap.get( "my_code"); エラーが発生します
sayesh kilaru 2013年

どのように反転できますか?値からキーを取得しますか?
2015年

58

キー/値を文字列として保存している場合、これは機能します:

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

問題は、HashMapに何が入力されるか(キーと値)です。


if HashMap <String、String> newMap = new HashMap <String、String>(); これから文字列要素を取得する方法...?ここで文字列値= newMap.get( "my_code"); エラーが発生します
sayesh kilaru 2013年

11

Genericsを使用してマップを次のように定義する場合

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

次に値をフェッチします

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

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


9

あなたの質問は私にはまったくわかりません。キーには「名前」はありません。マップに関する限り、「呼び出される」ことはありません。これは単なるキーであり、他のキーと比較されます。さまざまな種類のキーがたくさんある場合は、健全性のために、それらを異なるマップに配置することを強くお勧めします。

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



6

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


gr8説明ママ:)
eLemEnt

3

HashMapを次のように宣言したとします。

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

次に、マップ内のキーは文字データ型で、intタイプの値です。キーのタイプ、値タイプに関係なく、キーに対応する値を取得するには、構文は次のとおりです。

    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")の結果を文字列に変換する必要はありません。デフォルトで、エントリ時に文字列として値を保持している場合、文字列の値を返します。


1

これは、keySet()、get()、values()およびentrySet()関数を使用してマップのキーと値を取得する方法の別の例です。

        Map<Integer, String> testKeyset = new HashMap<Integer, String>();

        testKeyset.put(1, "first");
        testKeyset.put(2, "second");
        testKeyset.put(3, "third");
        testKeyset.put(4, "fourth");

        // Print a single value relevant to a specified Key. (uses keySet())
        for(int mapKey: testKeyset.keySet())
            System.out.println(testKeyset.get(mapKey));

        // Print all values regardless of the key.
        for(String mapVal: testKeyset.values())
            System.out.println(mapVal.trim());

        // Displays the Map in Key-Value pairs (e.g: [1=first, 2=second, 3=third, 4=fourth])
        System.out.println(testKeyset.entrySet());

0

HashMapからget(Object key)メソッドを使用できます。多くの場合、キークラスはマップメソッドの有用なクラスになるために、equalsメソッドをオーバーライドする必要があることに注意してください。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.