Java中如何把两个数组合并为一个

Java中如何把两个数组合并为一个http://freewind.me/blog/20110922/350.html在Java中,如何把两个String[]合并为一个?看起来是一个很简单的问题。但是如何才能把代码写得高效简洁,却还是值得思考的。这里介绍四种方法,请参考选用。一、apache-commons这是最简单的办法。在apache-commons中,有一个ArrayUtils.addAll(Object[],

大家好,又见面了,我是你们的朋友全栈君。

http://freewind.me/blog/20110922/350.html

在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()

static String[] concat(String[] a, String[] b) {
   String[] c= new String[a.length+b.length];
   System.arraycopy(a, 0, c, 0, a.length);
   System.arraycopy(b, 0, c, a.length, b.length);
   return c;
}

使用如下:

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

三、Arrays.copyOf()

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

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

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

public static <T> T[] concatAll(T[] first, T[]... rest) {
  int totalLength = first.length;
  for (T[] array : rest) {
    totalLength += array.length;
  }
  T[] result = Arrays.copyOf(first, totalLength);
  int offset = first.length;
  for (T[] array : rest) {
    System.arraycopy(array, 0, result, offset, array.length);
    offset += array.length;
  }
  return result;
}

使用如下:

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

四、Array.newInstance

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

private static <T> T[] concat(T[] a, T[] b) {
    final int alen = a.length;
    final int blen = b.length;
    if (alen == 0) {
        return b;
    }
    if (blen == 0) {
        return a;
    }
    final T[] 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);
    return result;
}

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/148061.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • jenkins自定义构建参数_git查看仓库地址

    jenkins自定义构建参数_git查看仓库地址前言当我们的自动化项目越来越多的时候,在代码仓库会提交不同的分支来管理,在用jenkins来构建的时候,我们希望能通过参数化构建git仓库的分支。下载安装GitParameter插件系统管理-

  • pycharm连接不上mysql中的数据库时_python Mysql时间带t

    pycharm连接不上mysql中的数据库时_python Mysql时间带t在pycharm连接mysql数据库时候,会出现时区错误的情况。默认都是讲时区改成‘+8:00’就好了。修改方法打开mysqlsetglobaltime_zone=’+8:00’但是,第二天再打开时,又出现报错,如图所示为了永久解决。可以再my.ini文件中最后加上,setglobaltime_zone=’+8:00’。my.ini默认在C:\ProgramData\MySQL\MySQLServer8.0修改my.ini成功解决后患…

  • wing是什么_可分开四叶草项链

    wing是什么_可分开四叶草项链在 Mars 星球上,每个 Mars 人都随身佩带着一串能量项链,在项链上有 N 颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是 Mars 人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为 m,尾标记为 r,后一颗能量珠的头标记为 r,尾标记为 n,则聚合后释放的能量为 m×r×n(Mars 单位),新产

  • intelj idea 2021 激活码[免费获取]

    (intelj idea 2021 激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~MLZP…

  • OSTaskCreateExt_getlocaltime函数

    OSTaskCreateExt_getlocaltime函数uC/OS创建任务有几个硬性要求1.任务必须被创建在多任务开始之前或者是运行的任务中。2.任务不能由ISR创建。3.任务必须在死循环中,并且不能有返回。//建立一个新任务  #if OS_TASK_CREATE_EN > 0                //允许生成OSTaskCreate()函数  INT8U  OSTaskCreate

  • 设计模式之6大原则(6)开闭原则

    设计模式之6大原则(6)开闭原则

    2021年11月15日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号