面试编程题2:不要用内建方法,实现两个数组合并

面试编程第二题,不能使用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是告诉我们,我们要造车,不需要再去造车轮子,因为别人已经给你造好了,直接拿过来用就可以。既然别人造了轮子,你去造汽车,就不要再去造轮子。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值