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

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

大家好,我是鸭哥。


最近,鸭哥帮部门招聘,做程序员的都知道,一个组里,妹纸真的太少了,刚刚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到了吗?你面试的时候,被问到过没?欢迎在留言区讨论~

相关文章
|
2月前
|
算法
【数组相关面试题】LeetCode试题
【数组相关面试题】LeetCode试题
|
2月前
|
存储
力扣面试经典题之数组/字符串
力扣面试经典题之数组/字符串
31 0
|
2月前
|
算法 前端开发
经典面试题:扁平化嵌套数组
经典面试题:扁平化嵌套数组
26 0
|
2月前
|
存储 JavaScript 前端开发
【面试题】JS的14种去重方法,看看你知道多少(包含数组对象去重)
【面试题】JS的14种去重方法,看看你知道多少(包含数组对象去重)
|
3天前
|
开发框架 .NET
技术好文共享:面试题:找出数组中只出现一次的2个数(异或的巧妙应用)(出现3次)
技术好文共享:面试题:找出数组中只出现一次的2个数(异或的巧妙应用)(出现3次)
|
20天前
|
数据采集 算法 数据挖掘
LeetCode 题目 80:删除排序数组中的重复项 II【算法面试高频题】
LeetCode 题目 80:删除排序数组中的重复项 II【算法面试高频题】
|
2月前
|
C++
【一刷《剑指Offer》】面试题 14:调整数组顺序使奇数位于偶数前面
【一刷《剑指Offer》】面试题 14:调整数组顺序使奇数位于偶数前面
|
2月前
|
算法 C++
【一刷《剑指Offer》】面试题 8:旋转数组的最小数字
【一刷《剑指Offer》】面试题 8:旋转数组的最小数字
|
2月前
|
安全 Java
面试官:线程调用2次start会怎样?我支支吾吾没答上来
面试官:线程调用2次start会怎样?我支支吾吾没答上来
16 1
|
2月前
|
JavaScript 前端开发 索引
经典面试题数组常用的方法
### 1.数组常用方法之 push()(==改变原数组,产生新数组==) - `push` 是用来在数组的末尾追加一个元素,返回添加以后的长度 ```javascript var arr = [1, 2, 3] // 使用 push 方法追加一个元素在末尾 arr.push(4) console.log(arr) // [1, 2, 3, 4] var res = arr.push(1,2,3,34); res//8 ``` ### 2.数组常用方法之 pop()(==改变原数组,产生新数组==) - `po
53 1