简体   繁体   English

我可以在Java中将String []用作HashMap值吗?

[英]Can I use String[] as HashMap values in Java?

I am a beginner in Java programming. 我是Java编程的初学者。 I want to create a HashMap whose values are String[]'s. 我想创建一个HashMap,其值为String []。

Suppose I have a JTable parametersTable with values in columns 2, 3, and 4 that I wish to fetch from each row. 假设我有一个JTable parametersTable表,希望在每一行中获取第2、3和4列中的值。 Each three-value set constitutes a HashMap value ( String[] ). 每个三值集构成一个HashMap值( String[] )。

HashMap<String, String[]> map = new HashMap<String, String[]>();
String[] row = {"one", "two", "three", "four", "five", "six", "seven","eight","nine","ten","eleven"};
for (int i=0; i<row.length; i++) {
map.put(row[i], new String[] {
   (String) parametersTable.getValueAt(i, 2),
   (String) parametersTable.getValueAt(i, 3),
   (String) parametersTable.getValueAt(i, 4)});
}
System.out.println(map);

The above code outputs: 上面的代码输出:

{nine=[Ljava.lang.String;@187930f1, six=[Ljava.lang.String;@2a8000ab, four=[Ljava.lang.String;@4436b0fd, one=[Ljava.lang.String;@134bc965, seven=[Ljava.lang.String;@42e49d45, eleven=[Ljava.lang.String;@68cb58ea, ten=[Ljava.lang.String;@198bbc56, two=[Ljava.lang.String;@54464ee3, three=[Ljava.lang.String;@32aeff9b, five=[Ljava.lang.String;@90ed2c, eight=[Ljava.lang.String;@443d9864}

Why is the output something cryptic and not the values like I expect? 为什么输出有些神秘,而不是我期望的值?

Why is the output something cryptic and not the values like I expect? 为什么输出有些神秘,而不是我期望的值?

[Ljava.lang.String;@ is the default representation of String arrays toString() method. [Ljava.lang.String;@是String数组toString()方法的默认表示。

Use Arrays.toString method instead. 请改用Arrays.toString方法。

So instead of System.out.println(map) use this to get a meaningful representation 因此,代替System.out.println(map)来获取有意义的表示

 for(Map.Entry<String, String[]> entry : map.entrySet()) {
       System.out.println(entry.getKey() + " -> " + Arrays.toString(entry.getValue()));
 }

Try this method :) 试试这个方法:)

     static void print(HashMap<String, String[]> map) {

        StringBuilder builder = new StringBuilder();
        for(Map.Entry<String, String[]> e : map.entrySet()) {

            builder.append(e.getKey()).append(" -> [");
            boolean tmp = false;
            for(String s : e.getValue()) {
                if(tmp) {
                    builder.append(" ");
                }
                tmp = true;
                builder.append(s);

            }
            builder.append("]\n");

        }
        System.out.println(builder.toString());

    }

You got [Ljava.lang.String;@90ed2c because default method toString() for array was invoked. 您得到[Ljava.lang.String;@90ed2c因为调用了数组的默认方法toString()。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM