合并两个无序数组java_Java实现把两个数组合并为一个的方法总结

2023-11-03

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

发布时间:2020-10-25 10:40:46

来源:脚本之家

阅读:76

作者:jaycee110905

本文实例讲述了Java实现把两个数组合并为一个的方法。分享给大家供大家参考,具体如下:

在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[] 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[] 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[] 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[] 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;

}

更多关于java相关内容感兴趣的读者可查看本站专题:《Java数组操作技巧总结》、《Java字符与字符串操作技巧总结》、《Java数学运算技巧总结》、《Java数据结构与算法教程》及《Java操作DOM节点技巧总结》

希望本文所述对大家java程序设计有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

合并两个无序数组java_Java实现把两个数组合并为一个的方法总结 的相关文章

随机推荐

  • 五. SpringCloud Alibaba Sentinel 自定义降级

    目录 一 简单解释 二 SentinelResource 注解详解 三 SentinelResource 设置异常降级方法 三 SentinelResource 降级方法与业务接口的解耦 一 简单解释 在前面配置限流 熔断降级时 可以针对u
  • linux网络编程(一)

    1 linux的网络模型 linux使用的网络模型是TCP UP四层网络模型 主要由应用程序 传输层 网络层 网络接口层组成 与OSI七层模型不同 但是又相互对应 它们之间关系如下图 OSI模型的应用层 表示层 会话层对应着TCP IP模型
  • Android中Application的onCreate多次调用问题

    http blog csdn net peidonghui article details 46043943 版权声明 本文为博主原创文章 未经博主允许不得转载 1 问题描述 一个Android应用需要为一个service单独开一个进程以完
  • 设置cin不忽略空格

    cin读取字符是会忽略空格和换行的 可以用noskipws设为不跳过空格或者换行 char step cin gt gt noskipws gt gt step
  • ERROR 1045(28000):Access denied for user ‘root‘@‘local‘(using password:yes)问题解决

    首先出现这种问题一般是密码错误 但是也有可能 输入密码正确也显示报错的情况 笔者刚在Xshell中安装mysql 第二天输入了正确密码 我保证我输入的是正确的 出现此类报错 解决方法一般是重置密码 1 跳过MYSQL的密码验证过程 在Xsh
  • 蓝桥杯单片机学习过程记录(二十八)第五届国赛串口通信相关代码补充

    蓝桥杯单片机学习过程记录 二十八 第五届国赛串口通信相关代码补充 UART串口通信 第五届国赛uart串口内容相关补充 设置数组存储输入输入字符 并与设定的密码相判断 include
  • springboot2+shiro+redis限制同一账号同时在线人数

    springboot2 shiro redis限制同一账号同时在线人数 我们在写系统的时候 需要注意账号安全问题 最好的处理方法就是同一个账号只能在一个地方登录 原理 大概的原理就是每次登录的时候将登录的sessionId存入缓存 然后登录
  • c# 二维码生成

    dll下载 https pan baidu com s 1MDQalDEoV4iDXRYsEzDXtw 生成图片 此dll适合Framework版本较多 Imports ThoughtWorks QRCode Codec Dim qrCod
  • 技术人修炼之道阅读笔记(七)系统性思维方法

    在工作中有两种高手 一种是他们有成体系的逻辑 术法清晰 另一种是他们悟性高 对大多数人来说 前一种可借鉴性更高 但前提是要足够努力和坚持 塑造系统性思维并进行验证和升级 一 什么是系统性思维 系统性思维 是把物质系统当作一个整体进行思考的思
  • matlab 中num2str函数的使用

    参考 https zhidao baidu com question 431413920 html 问题描述 先前使用num2str函数只是使用了该函数最常用的功能 将数字转换为字符串 但其实该函数还有额外格式上的功能 今天使用图像批处理的
  • vue中使用echarts词云

    1 安装 cnpm install echarts wordcloud 2 创建模板组件 WordCloudChart
  • 自制Jlink OB

    简言 bin 2020 for 6 6 bin 适用最新版的Jlink驱动 6 6x版本号 关于修改SN 打开Jlink Commander 输入exec setsn xxxxxxxx即可修改成功 依据网上的资源 做了一些修改 将原来的输出
  • 快速排序及三种排序方法 Hoare法/挖坑法/前后指针法

    快速排序 算法思想 基于分治的思想 是冒泡排序的改进型 同冒泡排序一样 快速排序也属于交换排序 通过元素之间的比较和交换位置来达到排序的目的 不同的是 冒泡排序在每一轮只把一个元素冒泡到数列的一端 而快速排序在每一轮挑选一个基准元素 并让其
  • 高性能的Web网关,一个工具等于 Nginx + Https证书 + 内网穿透 + 图片切割水印 + 网关登录...

    一 开源项目简介 Apiumc Gateway 它一个工具等于 Nginx Https证书 内网穿透 图片切割水印 网关登录 Apiumc Gateway 是高性能的Web网关 它从底层Socket原始通信层开始 采用多线程 多任务模式从新
  • HyperMesh 2D网格划分

    Hypermesh具有很强的二维四边形网格划分能力 核心思想是将二维几何模型划分为一个个四边形区域 然后在四边形区域内进行进一步的网格划分 常用工具是Geom gt quick edit和2D gt automesh 下面举例看一下 1 常
  • 图文并茂使用CocosBuilder制作Cocos2D游戏 分享0

    图文并茂使用CocosBuilder制作Cocos2D游戏 分享 0 目 录 The Game 设置工程 创建动画类型的主界面 本文由Zynga 工程师原创 翻译 Iven 张作宸 Butterfly 手把手教你使用CocosBuilder
  • 广东公需科目公需课十四五答案考试查询器

    QQ录屏20200723111627 效果看上面这个视频 其中需要data pkl文件 这上面无法上传 如果的可以联系我发给你 博客头像边上有我wx号 import pickle file open data pkl rb data pic
  • 010 - STM32学习笔记 - SysTick系统定时器

    010 STM32学习笔记 SysTick系统定时器 1 SysTick简介 SysTick是属于Cortex M内核的一个外设 嵌套在NVIC中 系统定时器是一个24位的递减计数器 每次计数事件位1 SYSCLK 在F429中之前配置的S
  • 最多变的混合模式-实色混合HardMix

    最多变的混合模式 实色混合HardMix 之前写过一篇介绍27种图层混合模式的非常详细 如果你想完全了解底层的原理 这篇文章不会让你失望 PS图层混合模式超详细解答 图层混合模式的原理 王先生的副业的文章 知乎 https zhuanlan
  • 合并两个无序数组java_Java实现把两个数组合并为一个的方法总结

    Java实现把两个数组合并为一个的方法总结 发布时间 2020 10 25 10 40 46 来源 脚本之家 阅读 76 作者 jaycee110905 本文实例讲述了Java实现把两个数组合并为一个的方法 分享给大家供大家参考 具体如下