面试编程第二题,不能使用Java内部方法,实现两个数组合并。首先,要知道什么是内建方法,内部方法,就是指JAVA API提供的方法,例如Math类下的求平方根的方法。同样,如果你对Java中数组有点印象,应该记得有一个copyof的方法,这个方法就能实现两个数组合并。我们先来看看自定义方法然后再看看内部Copyof方法的实现过程。面试过程中,限制你不能用Copyof方法,是考察你编程基本功的能力和对问题分析和思考的能力。还真的有开发人员只会使用JAVA API的方法,不会动手自己实现一个数组拷贝的功能。任何一个问题,肯定有多种解决方法。在找到这些解决方法之前,我们需要对问题分析,分析过后,才能有多套解决方案,才能知道哪些是最合适和能实现,但是不可取的方法。很多工作,要的不光是执行力,更需要分析问题,问题定位和提出解决方案的能力。
1.来看看通过循环实现两个数组合并,这里举例两个字符串数组合并。
package test;
public class StringContaisTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] A = {"a","dc","e","56","df"};
String[] B = {"tom","anthony"};
//创建一个新数组,长度是A+B
String[] C = new String[A.length + B.length];
//先把数组A的元素,保留原来顺序放入数组C
for(int i=0; i<A.length; i++){
C[i] = A[i];
}
//把数组B元素,紧跟着A放入C
for(int i=0; i<B.length; i++){
// 注意B的第一个元素是跟着A的最后一个元素后面放着
C[A.length+i] = B[i];
}
for(int i=0; i<C.length; i++){
System.out.print(C[i]+" ");
}
}
}
运行结果
a dc e 56 df tom anthony
2.数组拷贝内部方法实现
package test;
import java.lang.reflect.Array;
import java.util.Arrays;
public class StringContaisTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] A = {"a","dc","e","56","df"};
String[] B = {"tom","anthony"};
int Alength = A.length;
int Blength = B.length;
A = Arrays.copyOf(A, Alength+Blength); //把数组A扩容
System.arraycopy(B, 0, A, Alength, Blength);
//把合并后的数组A转换字符串给输出
System.out.println(Arrays.toString(A));
}
}
运行结果:
[a, dc, e, 56, df, tom, anthony]
对比上面两个方法,先不管哪种方法执行效率高的问题,就从节约内存资源的角度考虑,内建方法数组拷贝更加合理。自定义方法需要新建三个数组对象,也就需要在三块内存区域开销,而第二个方法,直接在数组A扩容的基础上操作,不需要额外创建数组对象。方法1是让我们有对问题的思考和分析能力,方法2是告诉我们,我们要造车,不需要再去造车轮子,因为别人已经给你造好了,直接拿过来用就可以。既然别人造了轮子,你去造汽车,就不要再去造轮子。