Java实现把两个数组合并为一个的方法总结
本文实例讲述了Java实现把两个数组合并为一个的方法。分享给大家供大家参考,具体如下:
在Java中,如何把两个String[]合并为一个?
看起来是一个很简单的问题。但是如何才能把代码写得高效简洁,却还是值得思考的。这里介绍四种方法,请参考选用。
一、apache-commons
这是最简单的办法。在apache-commons中,有一个ArrayUtils.addAll(Object[],Object[])方法,可以让我们一行搞定:
String[]both=(String[])ArrayUtils.addAll(first,second);
其它的都需要自己调用jdk中提供的方法,包装一下。
为了方便,我将定义一个工具方法concat,可以把两个数组合并在一起:
staticString[]concat(String[]first,String[]second){}
为了通用,在可能的情况下,我将使用泛型来定义,这样不仅String[]可以使用,其它类型的数组也可以使用:
static
当然如果你的jdk不支持泛型,或者用不上,你可以手动把T换成String。
二、System.arraycopy()
staticString[]concat(String[]a,String[]b){ String[]c=newString[a.length+b.length]; System.arraycopy(a,0,c,0,a.length); System.arraycopy(b,0,c,a.length,b.length); returnc; }
使用如下:
String[]both=concat(first,second);
三、Arrays.copyOf()
在java6中,有一个方法Arrays.copyOf(),是一个泛型函数。我们可以利用它,写出更通用的合并方法:
publicstaticT[]concat(T[]first,T[]second){ T[]result=Arrays.copyOf(first,first.length+second.length); System.arraycopy(second,0,result,first.length,second.length); returnresult; }
如果要合并多个,可以这样写:
publicstaticT[]concatAll(T[]first,T[]...rest){ inttotalLength=first.length; for(T[]array:rest){ totalLength+=array.length; } T[]result=Arrays.copyOf(first,totalLength); intoffset=first.length; for(T[]array:rest){ System.arraycopy(array,0,result,offset,array.length); offset+=array.length; } returnresult; }
使用如下:
String[]both=concat(first,second); String[]more=concat(first,second,third,fourth);
四、Array.newInstance
还可以使用Array.newInstance来生成数组:
privatestaticT[]concat(T[]a,T[]b){ finalintalen=a.length; finalintblen=b.length; if(alen==0){ returnb; } if(blen==0){ returna; } finalT[]result=(T[])java.lang.reflect.Array. newInstance(a.getClass().getComponentType(),alen+blen); System.arraycopy(a,0,result,0,alen); System.arraycopy(b,0,result,alen,blen); returnresult; }
更多关于java相关内容感兴趣的读者可查看本站专题:《Java数组操作技巧总结》、《Java字符与字符串操作技巧总结》、《Java数学运算技巧总结》、《Java数据结构与算法教程》及《Java操作DOM节点技巧总结》
希望本文所述对大家java程序设计有所帮助。