`
bmqnc
  • 浏览: 127568 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于将多个数组并为一个的实用函数

    博客分类:
  • java
 
阅读更多
这里,取字符串数组为例,对象比较麻烦,因为本身要判断各个数组的大小,java中对象又用引用表示,所以有点麻烦,做也能做,但就是比较麻烦。

我今天写的代码,是我感觉比较得意的,看下:

/**
	 * 将多个String类型的数组合并成一个String类型数组.
	 * 注意,用unionObjectArrays和toDestArray方法组合使用也能达到该函数的目的,
	 * 但时间和空间效率上unionStringArrays函数更快.
	 * @param sets
	 * @return
	 * @throws Exception
	 */
public static String[] unionStringArrays(String[]... sets) throws Exception{
		int length=0;
		for(String[] set:sets){
			int sLength=set.length;
			if(length+sLength<length){
				throw new Exception("所有数组长度之和超过int类型数的表示范围");
			}else{
				length+=sLength;
			}
		}
		
		String[] unionArray=null;
		try{
			unionArray=new String[length];
		}catch(Exception e){
			throw e;
		}
		
		int destPos=0;
		for(String[] set:sets){
			int sLength=set.length;
			System.arraycopy(set, 0, unionArray, destPos, sLength);
			destPos+=sLength;
		}
		
		return unionArray;
	}



以后可以考虑不但是字符串数组的,应该要能做到不考虑数组元素类型的那种数组联合。


其实Object也是可以做的,只不过比较麻烦,不过原理与上一个函数一样,但唯一的区别是获取到的数组时Object[]类型的,而Object[]类型的数组你强制转换又不行,因此只能参考ArrayList中toArray的实现方法,自己仿写了一个toArray,组合这两个函数就能达到上一个函数的目的,代码如下:
public static Object[] unionObjectArrays(Object[]... sets) throws Exception{
		int length=0;
		for(Object[] set:sets){
			int sLength=set.length;
			if(length+sLength<length){
				throw new Exception("所有数组长度之和超过int类型数的表示范围");
			}else{
				length+=sLength;
			}
		}
		
		Object[] unionArray=null;
		try{
			unionArray=new Object[length];
		}catch(Exception e){
			throw e;
		}
		
		int destPos=0;
		for(Object[] set:sets){
			int sLength=set.length;
			System.arraycopy(set, 0, unionArray, destPos, sLength);
			destPos+=sLength;
		}
		
		return unionArray;
	}
	
	/**
	 * 将Object类型的src数组转换为T类型的dest数组.注意,src与dest数组之间应该是可转换的.
	 * @param <T>
	 * @param src 源数组
	 * @param dest 目标数组
	 * @return
	 */
	public static <T> T[] toDestArray(Object[] src,T[] dest){
		int size=src.length;
		if (dest.length < size){
			@SuppressWarnings("unchecked")
			T[] destArray=(T[]) Arrays.copyOf(src, size, dest.getClass());
            return destArray;
		}
		
		System.arraycopy(src, 0, dest, 0, size);
		
        if (dest.length > size)
        	dest[size] = null;
        return dest;
	}
分享到:
评论

相关推荐

    java数组函数(摘自JAVA编程思想)

    在Java编程中,数组是一种非常基础且重要的数据结构,它允许我们存储同类型的多个元素。在处理大量数据时,数组提供了高效且灵活的访问方式。本篇将详细讲解Java中的数组函数及其应用,这些功能主要来自`...

    在多维数组中的特定维度和位置插入一个数组_matlab

    这里,我们看到有一个名为`insertarray.m`的文件,这很可能就是这样一个自定义函数,用于完成上述任务。这个函数可能会接受当前的多维数组、插入的数组、目标维度和位置作为参数,然后在适当的位置插入新的数据。 `...

    java中两个byte数组实现合并的示例

    在Java编程语言中,有时我们需要将两个或多个字节数组(`byte`数组)合并成一个新的单一数组。这种情况在处理二进制数据、文件读写或者与硬件交互时尤其常见。本文将深入探讨如何在Java中实现两个`byte`数组的合并,...

    03-python-choose 函数实现条件筛选-数组广播机制-数组读写-结构化数组

    例如,如果你有一个数组`a`和一个布尔数组`b`,你可以使用`numpy.choose(b, a)`来选取`a`中对应`b`为`True`的元素。这个函数提供了一种灵活的方式来根据条件过滤数据,是数据处理中的实用工具。 接下来,我们要了解...

    PHP数组函数讲解.docx

    - `array_merge()`将多个数组合并为一个,如果有相同的键,后面的值会覆盖前面的值。如果键是整数,它们将被重新排序。 - `array_merge_recursive()`与`array_merge()`相似,但在键冲突时,它会将值归拢到一个数组...

    Javascript数组函数大全

    `concat` 方法用于连接两个或多个数组,并返回一个新的数组。原始数组不会发生改变。 ```javascript let a = [1, 2, 3, 4, 5]; let b = a.concat(6, 7); console.log(a); // 输出: [1, 2, 3, 4, 5] console.log(b); ...

    php数组函数序列之array_intersect() 返回两个或多个数组的交集数组

    `array_intersect()` 是 PHP 中一个非常实用的数组处理函数,它的主要作用是找出两个或多个数组之间的交集。交集是指存在于所有数组中的相同元素。这个函数在处理多个数据源时,尤其在需要筛选出共同元素的情况下...

    php数组函数序列之array_unshift() 在数组开头插入一个或多个元素

    array_unshift() 函数的定义和用法非常直接,它允许开发者在数组的首位插入一个或多个元素。与 array_push() 函数不同,array_unshift() 是在数组的最前端进行元素的添加。这意味着新元素会被添加到数组的第一个位置...

    易语言学习进阶一维数组赋值

    3. **数组赋值函数**:易语言提供了一些内置函数,如“数组赋值”和“数组拷贝”,可以方便地将一个数组的值整体复制给另一个数组。这在处理数组数据的复制和交换时非常实用。 4. **数组初始化**:在声明数组的同时...

    Java数组,Java数组,多线程编程

    Java数组是程序设计中的基本构建块,它允许程序员存储多个相同类型的数据在一个单一的结构中。在Java中,数组是一种对象,它们具有固定的大小,并且一旦创建,就不能更改其长度。数组提供了通过索引来访问其元素的...

    php数组函数序列之array_pop() – 删除数组中的最后一个元素

    `array_pop()` 是一个非常实用的函数,它能帮助我们从数组的尾部移除最后一个元素,并返回该元素的值。下面我们将详细探讨 `array_pop()` 的使用方法和相关知识点。 **1. array_pop() 定义和用法** `array_pop()` ...

    isarraysorted检查一个数组是否进行排序

    这个函数接受一个数组作为参数,并返回一个布尔值,表示该数组是否已按照升序或降序排列。如果数组是空的或只包含一个元素,那么函数会认为数组是排序的。对于包含多个元素的数组,函数会逐个比较相邻元素的大小来...

    比较json对象中的两个数组含有的相同元素,点击按钮输出新的数组

    3. **`Set` 和 `intersection()`**:JavaScript的`Set`对象提供了一个`intersection()`方法,用于找出多个集合的交集,但原生的`Array`没有此方法。我们可以自定义一个函数来实现这个功能: ```javascript function...

    php使用array_rand()函数从数组中随机选择一个或多个元素

    `array_rand()` 函数的返回值是一个或多个数组键,而不是对应的值。如果你需要获取随机元素的值,可以将返回的键与原始数组合并,例如: ```php $random_values = array_intersect_key($a, array_flip($random_keys...

    易语言文本到数组

    这个"易语言文本到数组"的源码提供了一个实用的方法,帮助程序员高效地将长文本分解成可操作的数据结构——数组。 文本到数组的操作在很多场景下都很有用,例如读取文件内容、处理用户输入、解析日志或进行数据分析...

    php按照定长把一纬数组拆分成二维数组.

    该函数的目的是将`$input_array`分割成多个长度为`$length`的子数组,如果最后一个子数组不足`$length`,则保留剩余元素。 以下是一个可能的函数实现: ```php function array_split_fixed_length($input_array, $...

    5152单片机proteus仿真和源码用指针数组作为函数的参数显示多个字符串

    在本篇文章中,我们将深入探讨如何利用5152单片机结合Proteus软件进行仿真,并通过使用指针数组作为函数参数的方式来显示多个字符串。此外,还将介绍如何通过百度网盘获取相关资源。 ### 一、5152单片机简介 5152...

    第5讲 指针高级之指针数组-将若干字符串按字母顺序(由小到大)输出

    本讲将深入探讨指针数组的应用,特别是如何利用指针数组将多个字符串按照字母顺序进行排序并输出。首先,我们需要理解指针和数组的基本概念。 指针是C语言中的一个重要特性,它存储了一个变量的内存地址。通过指针...

    Excel数组变换技巧三则.rar

    然后,使用CONCATENATE或者CONCAT函数将两个数组合并成二维数组。 这些技巧在数据分析、财务计算、项目管理等领域都有广泛应用。掌握这些Excel数组变换技巧,能够极大地提升工作效率,使复杂的数据处理变得简单而...

    c++数组降维程序

    这里首先定义了一个3行4列的二维数组`sg`,然后通过`&sg[0][0]`获取了二维数组的首地址,并将其作为一维数组的首地址传入`maximum`函数。同时,通过`3*4`计算出了数组的长度(即元素个数),也一并传入了`maximum`...

Global site tag (gtag.js) - Google Analytics