`
bmqnc
  • 浏览: 122702 次
  • 性别: 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;
	}
分享到:
评论

相关推荐

    excel中161个VBA_自定义函数超级实用

    函数作用:检查一个数组是否为空.....................90 '81.函数作用:字母栏名转数字栏名.......................91 '82.函数作用:数字栏名转文字栏名.......................91 '83.函数作用:判断一件活页夹中是否...

    一组新的多维数组模板类

    C99标准推出了可变大小的多维数组,当然,实现该标准的编译器还不多,但是也从一个方 面说明了变量大小的多维数组是很有用的. C++标准直到现在还不支持,明年(2003年)的新标准也不知道会不会加进去.但是C++程序 员...

    js删除数组中指定元素-多种方法

    本文档还介绍了删除数组中多个指定元素的方法,包括使用splice()函数和遍历数组等多种方式。这些方法都具有实用性和通用性,可以应用于多种不同的场景中。 无论您是初学者还是有一定经验的开发者,这份资源都将为您...

    merge:用于对对象或数组列表进行深度合并的实用程序

    深度合并 用于执行两个或多个对象或数组的深度合并的实用程序。... 要与选项一起使用,请将第一个参数设置为对象数组(一个或多个数组),并将第二个参数设置为选项对象: merge ( [ ... objects ] , options

    绘制结构数组:此实用程序将绘制结构数组。-matlab开发

    如果您想绘制多个数组同一情节上的结构,您将不得不多次调用 plotAS 次。 句法: 绘图AS(S) plotAS(S,LineSpec) plotAS(S,LineSpec,'PropertyName',PropertyValue) plotAS(xname,yname,S) plotAS(xname,yname,S,...

    java源码包2

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    C#,实用代码-运算符重载、泛型与加强版的数组Array

    这是一篇特别适合稍微...但我们没有办法,只能分别写多个方法来处理不同的数据类型。这个时候,那么问题来了,有没有一种办法,用同一个方法来处理传入不同种类型参数的办法呢?泛型的出现就是专门来解决这个问题的。

    JavaScript实用范例词典01

    1.40 多个函数同时调用... 37 1.41 使用对象... 38 1.42 声明一个对象... 39 1.43 判断一个对象是否存在... 40 1.44 使用with省略对象名称... 41 1.45 用变量省略对象名称... 42 1.46 取得对象的编号... 43 ...

    javascript文档

    for...in 语句t 对应于对象或数组中的每个元素执行一个或多个语句。 fromCharCode 方法 返回 Unicode 字符值的字符串。 Function 对象 创建一个新的函数。 function 语句 声明一个新的函数。 getDate 方法 使用...

    微软JavaScript手册

    for...in 语句t 对应于对象或数组中的每个元素执行一个或多个语句。 fromCharCode 方法 返回 Unicode 字符值的字符串。 Function 对象 创建一个新的函数。 function 语句 声明一个新的函数。 getDate 方法 使用...

    JScript 语言参考

    for...in 语句t 对应于对象或数组中的每个元素执行一个或多个语句。 fromCharCode 方法 返回 Unicode 字符值的字符串。 Function 对象 创建一个新的函数。 function 语句 声明一个新的函数。 getDate 方法 使用...

    C语言程序设计标准教程

    虽然在前面各章的程序中都只有一个主函数main(), 但实用程序往往由多个函数组成。函数是C源程序的基本模块, 通过对函数模块的调用实现特定的功能。C语言中的函数相当于其它高级语言的子程序。 C语言不仅提供了...

    Visual C++开发经验技巧宝典(第4章)

    第4章 MFC实用技术 93 4.1 MFC常用宏应用 94 0188 获取32位整数的低字节和高字节数据 94 0189 将两个16位数组合为一个32位数 94 ...0221 将多个具有不同参数的函数赋值为同一个函数指针 105

    -C++参考大全(第四版) (2010 年度畅销榜

    第30章 实用函数 30.1 abort函数 30.2 abs函数 30.3 assert函数 30.4 atexit函数 30.5 atof函数 30.6 atoi函数 30.7 atol函数 30.8 bsearch函数 30.9 div函数 30.10 exit函数 30.11 getenv函数 30.12 labs函数 30.13...

    ptor-utils:Angular Protractor 测试框架实用功能

    等待承诺测试处理阻塞等待条件的实用函数 传递了一个 Promise 函数和一个测试函数 浏览器的等待将根据需要被调用多次,直到 Promise 完成 如果 Promise 从未完成,超时将使测试失败博客: : 功能扩展为接受可以传递...

    proposal-array-prototype-partition:实用程序功能的TC39提案,该提案根据项目与谓词的符合性返回两个数组

    Array.prototype.partition 关于使用谓词拆分数组的实用程序功能的建议。 您可以找到polyfill的初始实现 用法: ... .reduce函数可以用于操作项目,但不能轻松满足根据您对项目应用的条件为您构建多个数

    Jquery 数组操作大全个人总结

    jQuery的数组处理,便捷,功能齐全. 最近的项目中用到的比较多,深感实用,一步到位的封装了很多原生js数组不能企及的... 回调函数拥有两个参数:第一个为对象的成员或数组的索引, 第二个为对应变量或内容. 如果需要退出

Global site tag (gtag.js) - Google Analytics