鸭哥面试了一妹纸,问她如何打印数组?她支支吾吾了半天。。。

简介: 鸭哥面试了一妹纸,问她如何打印数组?她支支吾吾了半天。。。

大家好,我是鸭哥。


最近,鸭哥帮部门招聘,做程序员的都知道,一个组里,妹纸真的太少了,刚刚HR小姐姐,为了照顾咱们这个“和尚组”,特地拿了一份妹纸的简历给我,让我好好去招聘,争取能招聘过来。


鸭哥跟部门的其它小伙伴商量了一下,考查妹纸的什么面试题呢?最后,达成一致,就问一个最简单,又最经典的面试题:如何打印数组?


然而,这位应聘实习岗位的妹纸,支支吾吾了半天,也没回答出来~


我只能给组里的小伙伴们说,我真的尽力了!


其实,打印数组,一个看似普通得不能再普通的操作,却也难倒了不少初级程序员。技术论坛上相关提问有着贼高的阅读量,看来大家对这个问题解决方法的第一感,还是有些问题的。不怕,鸭哥今天给你说明白,也希望这位妹纸也能好好听听~


直觉中的打印方法


要打印变量,我们很自然地想到如下的方法,


int[] intArray = {1, 2, 3};
System.out.println(intArray);    // 打印结果:[I@1b6d3586
String[] strArray = {"print","test"};
System.out.println(strArray);    // 打印结果:[Ljava.lang.String;@4554617c


为什么会打印出[I@1b6d3586这样的奇怪字符呢?因为在 Java 中,数组无法重写 toString() 方法,如果直接打印一个数组,得到的是 className + '@' + 数组的十六进制的 hashCode. 那么有哪些简单的方法可以正确地打印数组呢?


常用的几种方法


1、使用 for 循环


最”朴实无华“的方法,却也是屡试不爽的方法,直接打印变量名不成,逐个遍历打印一定是可以的!


int[] intArray = {1, 2, 3};
for(int i = 0; i < intArray.length; i++)
    System.out.println(intArray[i]);



如果是多维数组的话,使用多层 for 循环嵌套就可以了。


2、使用 Arrays.toString() 或 Arrays.deepToString()


对于一维数组,我们可以使用 Arrays.toString() 方法,它支持将任意类型的数组转换为字符串,示例如下,


int[] intArray = {1, 2, 3};
System.out.println(Arrays.toString(intArray));    // 打印结果:[1, 2, 3]


但对于多维数组,用 Arrays.toString() 打印就会出现和直接打印数组变量名时一样的问题,这时候,我们就需要使用 Arrays.deepToString() 方法了


String[][] strArray = {{"print1","test1"},{"print2","test2"}};
//打印结果:[[Ljava.lang.String;@1b6d3586, [Ljava.lang.String;@4554617c]
System.out.println(Arrays.toString(strArray));
//打印结果:[[print1, test1], [print2, test2]]
System.out.println(Arrays.deepToString(strArray));

一维数组用 Arrays.toString() 方法,多维数组用 Arrays.deepToString() 方法,两者在具体实现上的区别,大家可以去看 Java 的源码,还是非常好懂的,这也是学习优秀编码习惯和思路的快捷方法!


3、使用 Arrays.asList()


需要说明的是,Arrays.asList() 方法只针对 Object 数组有效,打印基本数据类型(如int)的数组是不行的,


int[] intArray = {1, 2, 3};
System.out.println(Arrays.asList(intArray));    // 打印结果:[[I@1b6d3586]
Integer[] IntArray = new Integer[]{1, 2, 3};
System.out.println(Arrays.asList(IntArray));    // 打印结果:[1, 2, 3]

综合来看,Java 中打印数组最简单和通用的方法是使用 Arrays 类中的 toString() 或 deepToString() 方法;而当我们需要定制输出内容的格式时,使用 for 循环遍历则是比较方便的。


这个问题,你get到了吗?你面试的时候,被问到过没?欢迎在留言区讨论~

相关文章
|
6月前
|
算法
【数组相关面试题】LeetCode试题
【数组相关面试题】LeetCode试题
|
6月前
|
存储
力扣面试经典题之数组/字符串
力扣面试经典题之数组/字符串
51 0
|
6月前
|
算法 前端开发
经典面试题:扁平化嵌套数组
经典面试题:扁平化嵌套数组
42 0
|
3月前
|
C语言
【Amazon 面试题1】一个数组,里面得数出现的次数是偶数次,只有一个数出现的次数是奇数次,找出那个出现奇数次的数
本文介绍了解决Amazon面试题的一种方法,即在一个所有数字出现次数都是偶数,除了一个数字出现奇数次的数组中,利用异或运算的性质找出出现奇数次的数字,并提供了C语言实现的代码示例。
61 1
|
3月前
|
Java
Java 基础语法-面试题(54-63道)(数组+类+包)
Java 基础语法-面试题(54-63道)(数组+类+包)
41 16
|
4月前
|
存储 算法
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
|
5月前
|
开发框架 .NET
技术好文共享:面试题:找出数组中只出现一次的2个数(异或的巧妙应用)(出现3次)
技术好文共享:面试题:找出数组中只出现一次的2个数(异或的巧妙应用)(出现3次)
|
5月前
|
数据采集 算法 数据挖掘
LeetCode 题目 80:删除排序数组中的重复项 II【算法面试高频题】
LeetCode 题目 80:删除排序数组中的重复项 II【算法面试高频题】
|
6月前
|
安全 Java
面试官:线程调用2次start会怎样?我支支吾吾没答上来
面试官:线程调用2次start会怎样?我支支吾吾没答上来
32 1
|
6月前
|
C++
【一刷《剑指Offer》】面试题 14:调整数组顺序使奇数位于偶数前面
【一刷《剑指Offer》】面试题 14:调整数组顺序使奇数位于偶数前面