在Java中,如何把两个String[]合并为一个?

看起来是一个很简单的问题。但是如何才能把代码写得高效简洁,却还是值得思考的。这里介绍四种方法,请参考选用。

一、apache-commons

这是最简单的办法。在apache-commons中,有一个ArrayUtils.addAll(Object[], Object[])方法,可以让我们一行搞定:

String[] both = (String[]) ArrayUtils.addAll(first, second);

其它的都需要自己调用jdk中提供的方法,包装一下。

为了方便,我将定义一个工具方法concat,可以把两个数组合并在一起:

static String[] concat(String[] first, String[] second) {}

为了通用,在可能的情况下,我将使用泛型来定义,这样不仅String[]可以使用,其它类型的数组也可以使用:

static <T> T[] concat(T[] first, T[] second) {}

当然如果你的jdk不支持泛型,或者用不上,你可以手动把T换成String

二、System.arraycopy()

  1. static String[] concat(String[] a, String[] b) {
  2. String[] c= new String[a.length+b.length];
  3. System.arraycopy(a, 0, c, 0, a.length);
  4. System.arraycopy(b, 0, c, a.length, b.length);
  5. return c;
  6. }

使用如下:

String[] both = concat(first, second);

三、Arrays.copyOf()

在java6中,有一个方法Arrays.copyOf(),是一个泛型函数。我们可以利用它,写出更通用的合并方法:

  1. public static <T> T[] concat(T[] first, T[] second) {
  2. T[] result = Arrays.copyOf(first, first.length + second.length);
  3. System.arraycopy(second, 0, result, first.length, second.length);
  4. return result;
  5. }

如果要合并多个,可以这样写:

  1. public static <T> T[] concatAll(T[] first, T[]... rest) {
  2. int totalLength = first.length;
  3. for (T[] array : rest) {
  4. totalLength += array.length;
  5. }
  6. T[] result = Arrays.copyOf(first, totalLength);
  7. int offset = first.length;
  8. for (T[] array : rest) {
  9. System.arraycopy(array, 0, result, offset, array.length);
  10. offset += array.length;
  11. }
  12. return result;
  13. }

使用如下:

String[] both = concat(first, second);
String[] more = concat(first, second, third, fourth);

四、Array.newInstance

还可以使用Array.newInstance来生成数组:

  1. private static <T> T[] concat(T[] a, T[] b) {
  2. final int alen = a.length;
  3. final int blen = b.length;
  4. if (alen == 0) {
  5. return b;
  6. }
  7. if (blen == 0) {
  8. return a;
  9. }
  10. final T[] result = (T[]) java.lang.reflect.Array.
  11. newInstance(a.getClass().getComponentType(), alen + blen);
  12. System.arraycopy(a, 0, result, 0, alen);
  13. System.arraycopy(b, 0, result, alen, blen);
  14. return result;
  15. }

http://blog.csdn.net/jaycee110905/article/details/9179227

Java中如何把两个数组合并为一个的更多相关文章

  1. Java实现把两个数组合并为一个的方法总结

    本文实例讲述了Java实现把两个数组合并为一个的方法.分享给大家供大家参考,具体如下: 在Java中,如何把两个String[]合并为一个? 看起来是一个很简单的问题.但是如何才能把代码写得高效简洁, ...

  2. 手写面试编程题- 数组去重 深拷贝 获取文本节点 设置奇数偶数背景色 JS中检测变量为string类型的方法 第6题闭包 将两个数组合并为一个数组 怎样添加、移除、移动、复制、创建和查找节点? 继承 对一个数组实现随机排序 让元素水平 垂直居中的三种方式 通过jQuery的extend方法实现深拷贝

    第1题==>实现数组去重 通过 new Set(数组名) // var arr = [12, 12, 3, 4, 5, 4, 5, 6, 6]; // var newarr1 = new Set ...

  3. python中如何将两个list合并成一个list,不用for语句

    1, add 2, 用list的extend方法,L1.extend(L2),该方法将参数L2的全部元素添加到L1的尾部,例如: 3, 用切片(slice)操作,L1[len(L1):len(L1)] ...

  4. java 两个数组合并

    需求:两个字符串合并(如果想去重复,参考下一篇--数组去重复及记录重复个数) //方法一 Arrays类 String[] a = {"A","B"," ...

  5. JAVA将两个byte数组合并为一个

    /** * 将两个byte数组合并为一个 * @param data1 要合并的数组1 * @param data2 要合并的数组2 * @return 合并后的新数组 */ public stati ...

  6. python将两个数组合并成一个数组的两种方法的代码

    内容过程中,把写内容过程中常用的内容收藏起来,下面的资料是关于python将两个数组合并成一个数组的两种方法的内容,希望能对小伙伴们有帮助. c1 = ["Red","G ...

  7. java中线程分两种,守护线程和用户线程。

    java中线程分为两种类型:用户线程和守护线程. 通过Thread.setDaemon(false)设置为用户线程: 通过Thread.setDaemon(true)设置为守护线程. 如果不设置次属性 ...

  8. java中 列表,集合,数组之间的转换

    java中 列表,集合,数组之间的转换 java中 列表,集合,数组之间的转换 java中 列表,集合,数组之间的转换 List和Set都是接口,它们继承Collection(集合),集合里面任何数据 ...

  9. vue中过滤器比较两个数组取相同值

    在vue中需要比较两个数组取相同值 一个大数组一个 小数组,小数组是大数组的一部分取相同ID的不同name值 有两种写法,两个for循环和map写法 const toName = (ids, arr) ...

随机推荐

  1. windows7下virtualBox配置识别usb

    在windows7下安装virtualBox后.在虚拟机里面是不能识别手机的,此时我们须要做一些配置. 一. virtualBox菜单: 管理–全局设定–扩展–加入包(右側,virtualBox ex ...

  2. 编写javascript的基本技巧

    第一.编写可维护的代码 什么叫着编写可维护的代码呢?就是当我的做出来的项目,拿给其它编码团队能很快的看懂 你编写的代码,你的整个项目的逻辑等等.一个项目的修改维护是要比开发一个项目的成本 是要高的.例 ...

  3. [DevExpress]图表开发工具类 ChartUtils

    /// <summary> /// 基于.NET 3.5的Chart工具类;对应的DevExpress版本:12.1.7; /// </summary> public stat ...

  4. Emmet 插件使用教程

    1)使用 Emmet 生成 HTML 的语法详解生成 HTML 文档初始结构 HTML 文档的初始结构,就是包括 doctype.html.head.body 以及 meta 等内容.你只需要输入一个 ...

  5. 常用的CSS清除浮动的方法优缺点分析(个人学习笔记)

    一.抛一块问题砖(display: block)先看现象: 分析HTML代码结构: <div class="outer"> <div class="di ...

  6. js 多媒体audio video

    本文主要简单的介绍一下audio 和 video两个标签的用法 <audio src="music.mp3"></audio> <video src= ...

  7. 前端资料QQ群交流

    转:https://github.com/jsfront/src/blob/master/qq.md 这本来是我QQ群内部的一份公共约定的日常交流规则,后来得到大伙的一致认可,并用实际行动来捍卫它,使 ...

  8. SQL Server中调用WebService的实例

    尊重原著作:本文转载自http://www.cnblogs.com/icycore/p/3532197.html 1.Ole Automation Procedures 服务器配置选项 当启用 OLE ...

  9. maven简单工具命令

    (一)聚合项目的创建//创建父项目mvn archetype:create -DgroupId=com.ztesoft.resmaster -DartifactId=lifecycle<pack ...

  10. Oracle的汉字转拼音首字母的函数

    CREATE OR REPLACE FUNCTION F_PINYIN(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS V_COMPARE VARCHAR2(100); ...