使用泛型对java数组扩容
编写一个通用方法,其功能是将数组扩展到10%+10个元素(转载请注明出处)
package cn.reflection;
import java.lang.reflect.Array;
public class ArrayGrowTest {
public static void main(String[] args){
ArrayGrowTest growTest=new ArrayGrowTest();
int[] aInt={1,2,3,4};
System.out.print("原数组:");
growTest.printArray(aInt);
aInt=(int[]) growTest.goodArrayGrow(aInt);
System.out.print("扩容后数组:");
growTest.printArray(aInt);
String[] aStr={"hello","world","ni","hao","ma"};
System.out.print("原数组:");
growTest.printArray(aStr);
aStr=(String[]) growTest.goodArrayGrow(aStr);
System.out.print("扩容后数组:");
growTest.printArray(aStr);
}
/**
* 数组扩容方法,支持不同数组类型
* @param a 原数组
* @return newArray 新数组
*/
public Object goodArrayGrow(Object a){
Class cl=a.getClass();
if(!cl.isArray()){
return null;
}
Class componentType=cl.getComponentType(); //使用Class类的getComponentType方法确定数组对应的类型
int length=Array.getLength(a); //原长度
int newLength=length*11/10+10; //新长度
Object newArray=Array.newInstance(componentType, newLength); //实例化新数组
//为新数组赋值,a代表原数组,第一个0代表原数组复制起始位置,newArray代表新数组,第二个0代表新数组放值起始位置,length代表从原数组中复制多长到新数组
System.arraycopy(a, 0, newArray, 0, length);
return newArray;
}
/**
* 输出数组内容
* @param a 需要输出的数组
*/
public void printArray(Object a){
Class cl=a.getClass();
if(!cl.isArray()){
return ;
}
Class componentType=cl.getComponentType();
int length=Array.getLength(a);
System.out.print(componentType.getName()+"["+length+"]={");
for(int i=0;i<length;i++){
System.out.print(Array.get(a, i)+ " ");
}
System.out.println("}");
}
}
使用泛型对java数组扩容的更多相关文章
- [转载]Java数组扩容算法及Java对它的应用
原文链接:http://www.cnblogs.com/gw811/archive/2012/10/07/2714252.html Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组 ...
- Java数组扩容算法及Java对它的应用
1)Java数组对象的大小是固定不变的,数组对象是不可扩容的.利用数组复制方法可以变通的实现数组扩容.System.arraycopy()可以复制数组.Arrays.copyOf()可以简便的创建数组 ...
- java数组扩容
有些时候使用数组代替栈,玩意数组容量不够需要扩容 则: 1.Array.toString();直接遍历打印数组 2.数组扩容采用Array.copyOf(),直接实现数组扩容功能,非常强大 (实际 ...
- Java 数组扩容
在添加数据到达数组的上限的时候数组进行扩容: public void resizeArrayCaptcity(){ if(size>=arr.length){ Emp [] arr2=new ...
- [改善Java代码]不能初始化泛型参数和数组
泛型类型在编译期被擦除,我们在类初始化时将无法获得泛型的具体参数,比如这样的代码: class Foo<T>{ //private T t =new T();//报错Cannot inst ...
- -Java-Runoob-高级教程-实例-数组:09. Java 实例 – 数组扩容
ylbtech-Java-Runoob-高级教程-实例-数组:09. Java 实例 – 数组扩容 1.返回顶部 1. Java 实例 - 数组扩容 Java 实例 以下实例演示了如何在数组初始化后 ...
- Java - 数组解析
java提高篇(十八)-----数组之一:认识JAVA数组 一.什么是数组 数组?什么是数组?在我印象中的数组是应该这样的:通过new关键字创建并组装他们,通过使用整形索引值访问它的元素,并且它的尺寸 ...
- 藏在Java数组的背后,你可能忽略的知识点
目录 引言 概念 区别于C/C++数组 区别于容器 数组特性 随机访问 Java数组与内存 解惑 数组的本质 Java中的数组是对象吗? Java中数组的类型 Java中数组的继承关系 参考资料 引言 ...
- java数组知识总结(一)//按类
在线api 目录: 零/数组(基本元素) 1. 声明一个数组 2. 创建一个数组 3. 数组名.length 4. 数组的引用 一/java.lang.reflect.Array / ...
随机推荐
- 关于 ls 命令的一个小小的缺陷
linux 的 ls : ls后边加上要显示的路径时:比方 ls /tmp 它会打印一边 /tmp 下的信息 当ls后边跟上多个同样路径的名字是,它会打印多次同样的信息 比方 ls /tmp /tmp ...
- Oracle Bills of Material and Engineering Application Program Interface (APIs)
In this Document Goal Solution 1. Sample Notes for BOM APIs 2. Datatypes used in these APIs ...
- 依据Path取Json指定节点的值
下面方法为依据Path取json节点值得方法.废话不多说,先上代码: 測试方法例如以下:
- new到底做了什么?
下面是一个实例化自定义的对象,我们将要对他进行分析 //定义构造函数 function A(){ this.b = 1 //在这个对象里增加一个属性 //不可以拥有返回对象的return语句 } va ...
- JSON、XML 解析
iOS开发--XML/JSON数据解析 不错的文章http://www.jianshu.com/p/a54d367adb2a
- iOS-Core Text 入门
NSTextView和Attribued String 第一次接触苹果系的富文本编程是在写Mac平台上的一个输入框的时候,输入框中的文字可以设置各种样式,并可以在文字中间插入图片,好在Mac的AppK ...
- iOS8的新特性
iOS8的几个重要变化: 家庭分享.用户可以创建家庭分享,除创建者之外最多可以加入6个家庭成员.通过该功能,用户可以和家人分享位置.照片.日历.应用程序.音乐和视频等. 键盘.苹果在iOS8之后开放了 ...
- 关于EJB 时间注解与oracle数据库时间格式
EJB中Temporal是时间注解,其中TemporalType是时间注解的枚举类型其中包括 TemporalType类型,请看源码/*** Type used to indicate a speci ...
- EassyMock实践 自定义参数匹配器
虽然easymock中提供了大量的方法来进行参数匹配,但是对于一些特殊场合比如参数是复杂对象而又不能简单的通过equals()方法来比较,这些现有的参数匹配器就无能为力了.easymock为此提供了I ...
- PHP Curl CURLOPT_POSTFIELDS 1024
resolve : curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); url: http://www.laruence.com/2011/ ...