Java:将一个集合转换为一个字符串表示的数组

问题描述:

从Sun的Java Tutorial,我想这段代码会将一个集合转换为一个数组。Java:将一个集合转换为一个字符串表示的数组

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 

我有什么误解?

+2

“[Ljava.lang.String; @ 9b49e6”是一个字符串数组。 – Fredrik 2009-06-14 13:16:19

+0

元素的顺序是否准确?我有类似的情况,订单似乎有自己的想法,而不是按项目的添加顺序。 – electrichead 2012-01-24 03:45:13

+0

集合通常没有定义的顺序,所以您不能依赖您将元素放入集合的顺序与您将它们排列的顺序相同。如果这是你想要的,试试Set接口的LinkedHashSet实现;它增加了这个保证。 – Frans 2012-07-10 13:29:39

该代码工作正常。

替换:

System.out.println(array); 

随着:

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

输出:

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

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

我不认为你有任何误解;代码应该工作。该阵列,但是,是不是足够聪明,打印toString方法的内容,所以你必须与

for(String s : array) println(s); 

或类似的东西打印内容。

没关系。

由于println 调用object.toString()以获取输出对象中的字节,所以您没有看到带有System.out.println(array)的数组内容。由于HashSet覆盖默认的toString()实现,因此您可以使用System.out.println(set)查看设置的内容。

由于阵列不覆盖默认的toString()(提供类名和某种身份的散列码),你所得到的模糊[Ljava.lang.String; @ 9b49e6

希望帮助

为了完整性也检查java.util.Arrays.toStringjava.util.Arrays.deepToString

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

称为DFA提到的,只需更换:

System.out.println(array); 

与...

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

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