Java合并两个int数组合并_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[]可以使用,其它类型的数组也可以使用:
staticT[]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;
}
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[] 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;
}
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合并两个int数组合并_Java中如何把两个数组合并为一个相关推荐
- 两个byte数组拼接_java中两个byte数组实现合并的示例
java中两个byte数组实现合并的示例 今天在于硬件进行交互的过程中,要到了了需要两个数组进行合并,然后对数组进行反转和加密操作,以下是两个byte数组合并的方法. /** * * @param d ...
- java实现对大文件切割下载_Java实现大文件的切割与合并操作示例
Java实现大文件的切割与合并操作示例 发布时间:2020-09-27 02:25:08 来源:脚本之家 阅读:99 作者:HiBoyljw 本文实例讲述了Java实现大文件的切割与合并操作.分享给大 ...
- int数组初始化_Java中到底有没有多维数组
Java 中没有多维数组的概念,从数组底层的运行机制上来看 Java 没有多维数组,但是 Java 提供了支持多维数组的语法,可以实现多维数组的功能. Java 语言里的数组类型是引用类型,因此数组变 ...
- java arraylist与数组转换_java中String,数组,ArrayList三者之间的转换
免费资源网 - https://freexyz.cn/ ArrayList转为String和数组 造一个元素为Integer的ArrayList 为list_int 造一个元素为String 的 Ar ...
- java中调用数组参数_java中如何调用带有数组类型参数的存储过程
java中如何调用带有数组类型参数的存储过程 关注:95 答案:3 mip版 解决时间 2021-01-28 00:39 提问者万丈深渊 2021-01-27 14:00 不知道java中java ...
- java 打印byte数组内容_java中打印byte数组
JAVA字节转换 字节(Byte)简称:"B",字位(Bit)简称"b", 1 个字位(Bit)=1 个二进制数, 1 个字节=8 个字位=8 个二进制数, 1 ...
- java 数组 内存_Java 中数组的内存分配
Java 中数组的内存分配 1.Java 程序在运行时,需要在内存中分配空间.为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据和内存管理方式. 2.数组基本概念 数组是 ...
- java 数组 包含_Java中高效的判断数组中某个元素是否存在详解
一.检查数组是否包含某个值的方法 使用List public static boolean useList(String[] arr, String targetValue) { return Arr ...
- java 数组遍历_Java中遍历数组使用foreach循环还是for循环?
从JDK1.5起,增加了新功能Foreach,它是for循环遍历数据的一种简写形式,使用的关键字依然是for,但参数格式不同.其详细用法为: for(Type e:collection){ //对变量 ...
- java多线程同步的四种方法_java中实现多线程的两种方法
java多线程有几种实现方法,都是什么?同步有几种实java中多线程的实现方法有两种:1.直接继承thread类:2.实现runnable接口:同步的实现方法有五种:1.同步方法:2.同步代码块:3. ...
最新文章
- 不用写代码就能学用Pandas,适合新老程序员的神器Bamboolib
- html传递guid参数,C#中的Guid.ToString鲜为人知参数用法
- mysql union 放弃索引_MySQL的or/in/union与索引优化
- xtrabackup mysql 5.6_percona-xtrabackup工具实现mysql5.6.34的主从同步复制
- .NET 6新特性试用 | record struct
- *【HDU - 1506】【POJ - 2559】Largest Rectangle in a Histogram(单调栈或动态规划)
- 研发人员为什么留不住
- git命令:将多个commit提交记录修改为1条
- python最常用的编程方式是什么_python常用模块和对象编程
- Pipeline Alpha版本项目展示
- 一个15年的架构师谈“如何成为一名优秀的解决方案架构师”
- Openlayer:学习笔记之交互
- 论文写作——latex三线表tabular*文本居中与正文两端对齐、标题加黑
- 为Raspberry Pi 2编译内核模块
- java opencv 纠偏_一种基于OpenCV的高拍仪拍摄文档物体纠偏方法与流程
- java中包、不同包下类之间的访问以及编译和运行示例
- 计算机一级考试的时候用计算器,在WPS文字里设置计算器功能
- 【量化笔记】技术指标 Technical Indicator
- QQ样式的在线客服代码
- CodeM 第三题 世界杯
热门文章
- 基于曲率的体素聚类的三维激光雷达点云实时鲁棒分割方法
- 根据相机外参实现单应矩阵计算的理论与实践
- 计算机图形学——BRDF
- 【讲人话】Angular如何通过@ViewChildren获取实时渲染的动态DOM节点元素(@ViewChild只能获取静态的固定DOM节点)
- 《中国式方案秘籍(上部)》
- 《初级前端开发人员经常容易忽视几个细节问题汇总》
- 在Ubuntu 14.04 64bit上安装Master PDF Editor 3.2.81
- Data - 数据思维 - 上篇
- [Swift]LeetCode901. 股票价格跨度 | Online Stock Span
- react实现全选、取消全选和个别选择