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

ing*_*esp 32 java arrays set

从Sun的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这给了

[a, c, b]
[Ljava.lang.String;@9b49e6
Run Code Online (Sandbox Code Playgroud)

我误解了什么?

coo*_*ird 32

代码工作正常.

更换:

System.out.println(array);
Run Code Online (Sandbox Code Playgroud)

附:

System.out.println(Arrays.toString(array));
Run Code Online (Sandbox Code Playgroud)

输出:

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

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

  • ps:请注意,当您调用"toArray"方法时,不应构造零长度数组.这是一种浪费,因为它将在内部创建一个新数组以适合您的数据.如果你这样做:set.toArray(new String [set.size()])你可以保存自己的数组分配,因为"toArray"方法将看到传递的数组足够大以容纳数据.直接来自javadocs:如果集合适合指定的数组,则返回其中.否则,将使用指定数组的运行时类型和此集合的大小分配新数组. (2认同)

dfa*_*dfa 9

为了完整性,还要检查java.util.Arrays.toStringjava.util.Arrays.deepToString.

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


小智 5

没关系.

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

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

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

希望有所帮助