-2

適切な出力が得られないことを除いて、文字列キーと文字配列を使用して単純なハッシュ マップを出力しようとしています。

出力は基本的に次のようになります。

 Key :3  Value :[C@35960f05
 Key :2  Value :[C@35960f05
 Key :1  Value :[C@35960f05

char配列の実際の場所のコードはどれだと思いますか? 正直なところ、これが何を意味するのか、何と呼ばれているのかわからなかったので、グーグルで検索しませんでした。これを修正する方法や、自分で解決策を見つけることができるように情報を見つけられる場所を教えてください。これが私のコードです:

public class MapExample {

public static void main(String[] args) {

    Map<String, char[]> mp = new HashMap<String, char[]>();

    char[] words = new char[3];
    words[0] = 'a';
    words[1] = 'b';
    words[2] = 'c';

    mp.put("1", words);
    mp.put("2", words);
    mp.put("3", words);

    Set s = mp.entrySet();
    Iterator it = s.iterator();

    while (it.hasNext()) {
        Map.Entry m = (Map.Entry) it.next();
        String key = (String) m.getKey();
        char[] value = (char[]) m.getValue();

        System.out.println("Key :" + key + "  Value :" + value);
    }
}
}
4

3 に答える 3

1

配列は参照型ですが、Java の基本スーパークラスから継承しないため、メソッドをオーバーライドしてテキスト表現を提供することObjectはできません。toString()

java.util.Arrays配列を文字列として返す関数を簡単に記述したり、クラスtoString()メソッドを使用したりできます。

 import java.util.Arrays;
 System.out.println("Key :" + key + "  Value :" + Arrays.toString(value));

独自のメソッドを作成することをお勧めしますが、署名から始めましょう。

private String charArrayToString(char[] chars) {
    return null;
}
于 2013-06-14T15:44:18.593 に答える
0

あなたの値は文字の配列(char[])であるためです。だからあなたが電話するとき

System.out.println(... + value);

toString()配列のメソッドを呼び出します。オブジェクト記述子のようなものを出力します。唯一の解決策は、value配列を取得し、それを反復処理して、そこから文字列を作成することです。またはお電話Arrays.toString(value)ください。

于 2013-06-14T15:44:25.903 に答える
0

Java の配列は Object の toString() をオーバーライドしないため、@ の後に 16 進数のハッシュコードが続くだけです。

クラス Arrays は、このようなことを行うためのいくつかの便利なメソッドを提供します。Arrays.toString() は、配列を出力するための適切な方法です。多次元配列を使用している場合は、Arrays.deepToString() を使用できます。

http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html

于 2013-06-14T15:47:43.680 に答える