思考:如何优雅的打印数组?

今天看到一篇有意思的博客,名为《打印Java数组最优雅的方式是什么?》点进去看了一下,感觉蛮有意思的,故自己也手敲的玩了一下,在此做一个分享。

// 定义一个string数组
   String[] title = {"我是","菜鸟","Java","程序猿","八日蝉"};
   // 直接打印
   System.out.println(title); // 结果是该数组的类型名+hashCode(一般人可看不懂!)

一、使用 for 循环

// 方法一:万能的for循环
        //普通for
        for(int i = 0; i < title.length; i++){
            System.out.println(title[i]);
        }
        //增强for
        for (String s:title) {
            System.out.println(s);
        }

一点也不优雅,甚至有点low

二、使用 Stream
如果使用的是 JDK8 以上的版本,我们可以使用 Stream 这种时髦、fashion 的方式来遍历数组,顺带将其打印出来。

// 方法二:使用时髦的Stream
        //第一种:lambda表达式加持
        Arrays.asList(title).stream().forEach(s -> System.out.println(s));

        //第二种
        Stream.of(title).forEach(System.out::println);

        //第三种
        Arrays.stream(title).forEach(System.out::println);

虽然看起来高级,但结果并不是很优雅

三、使用 Arrays.toString()
Arrays.toString() 可以将任意类型的数组转成字符串,包括基本类型数组和引用类型数组

// 方法三:使用Arrays.toString()
        System.out.println(Arrays.toString(title));

        //若需要打印多维数组
        String[][] titles = new String[][]{{"我是","菜鸟"},{"Java","程序猿","八日蝉"}};
        System.out.println(Arrays.deepToString(titles));

真的很优雅

顺便再来看一下 toString() 方法的源码。

public static String toString(Object[] a) {
    if (a == null)
        return "null";
<span class="hljs-keyword" style="color: #333; font-weight: bold; line-height: 26px;">int</span> iMax = a.length - <span class="hljs-number" style="color: #008080; line-height: 26px;">1</span>;
<span class="hljs-keyword" style="color: #333; font-weight: bold; line-height: 26px;">if</span> (iMax == -<span class="hljs-number" style="color: #008080; line-height: 26px;">1</span>)
    <span class="hljs-keyword" style="color: #333; font-weight: bold; line-height: 26px;">return</span> <span class="hljs-string" style="color: #d14; line-height: 26px;">"[]"</span>;

StringBuilder b = <span class="hljs-keyword" style="color: #333; font-weight: bold; line-height: 26px;">new</span> StringBuilder();
b.append(<span class="hljs-string" style="color: #d14; line-height: 26px;">'['</span>);
<span class="hljs-keyword" style="color: #333; font-weight: bold; line-height: 26px;">for</span> (<span class="hljs-keyword" style="color: #333; font-weight: bold; line-height: 26px;">int</span> i = <span class="hljs-number" style="color: #008080; line-height: 26px;">0</span>; ; i++) {
    b.append(String.valueOf(a[i]));
    <span class="hljs-keyword" style="color: #333; font-weight: bold; line-height: 26px;">if</span> (i == iMax)
        <span class="hljs-keyword" style="color: #333; font-weight: bold; line-height: 26px;">return</span> b.append(<span class="hljs-string" style="color: #d14; line-height: 26px;">']'</span>).toString();
    b.append(<span class="hljs-string" style="color: #d14; line-height: 26px;">", "</span>);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值