Java:将集合转换为数组以表示String

时间:2009-06-14 13:12:12

标签: java arrays set

从Sun的Java Tutorial开始,我认为这段代码会将一个集合转换为一个数组。

import java.util.*;

public class Blagh {
    public static void main(String[] args) {
        Set<String> set = new HashSet<String>();
        set.add("a");
        set.add("b");
        set.add("c");
        String[] array = set.toArray(new String[0]);
        System.out.println(set);
        System.out.println(array);
    }
}

然而,这给出了

[a, c, b]
[Ljava.lang.String;@9b49e6

我误解了什么?

6 个答案:

答案 0 :(得分:32)

代码工作正常。

替换:

System.out.println(array);

使用:

System.out.println(Arrays.toString(array));

输出:

[b, c, a]
[b, c, a]

数组的String表示显示数组的“文本表示”,由Object.toString获得 - 这是类名和数组的哈希码作为十六进制字符串。

答案 1 :(得分:9)

为了完整性检查,java.util.Arrays.toStringjava.util.Arrays.deepToString也是如此。

后者在处理时特别有用 嵌套数组(如Object [] [])。

答案 2 :(得分:5)

没关系。

您没有看到System.out.println(array)的数组内容,因为println 调用object.toString()从Object获取输出的字节。

由于HashSet会覆盖默认的toString()实现,因此您可以使用System.out.println(set)查看设置内容;

由于数组没有覆盖默认的toString()(它给出类名和某种身份哈希码),你得到模糊[Ljava.lang.String; @ 9b49e6

希望有所帮助

答案 3 :(得分:2)

正如dfa所说,你可以替换:

System.out.println(array);

...与

System.out.println(Arrays.toString(array));

答案 4 :(得分:1)

我认为你没有误解任何事情;代码应该工作。但是,该数组不够智能,无法在toString方法中打印其内容,因此您必须使用

打印内容。
for(String s : array) println(s);

或类似的东西。

答案 5 :(得分:0)

您的结果正确无误。不幸的是,数组上的toString()方法仍然是原始的Object.toString(),因此默认情况下输出有些不可用,但适用于所有数组。