下面方法是用来扩展任意类型的数组,而不仅仅是对象数组。该方法主要是通过反射机制实现的。
增加对象数组大小一般分为以几步:
(1)首先,获取原始数组的类对象;
(2)其次,确认它是一个数组;
(3)再次,使用Class类的getComponentType方法确定数组对应的类型;
(4)最后,按需求创建目标对象,并将原始数组中的对象拷贝到目标数组中。
/**返回的数组类型是指定的类型**/
private static Object goodArrayCopy(Object a){
Class<?> c = a.getClass();
/**判断传入参数是否为数组**/
if(!c.isArray()) return null;
/**获取数组对应的类型**/
Class<?> componentType = c.getComponentType();
/**获取原始数组长度**/
int len = Array.getLength(a);
/**新数组长度,可以自定义设置**/
int newlen = len * 11 / 10 + 10;
/**创建新数组**/
Object newArray = Array.newInstance(componentType, newlen);
/**将原始数组对象拷贝到新的数组中**/
System.arraycopy(a, 0, newArray, 0, len);
return newArray;
}
下面的方法也是增加数组大小,其传入的参数是object[],返回的对象也是object[],但是返回值的类型不再是原始的类型,而是Object。如果原始的的数组为int[]类型,最后返回的object[]数组将无法转为int[]类型数组。所以,用方法来增加数组的大小是不可靠的。
/**返回数组类型是Object[] 而不是指定的类型**/
private static Object[] badArrayCopy(Object[] a){
int newlen = a.length * 11 / 10 + 10;
Object[] newArray = new Object[newlen];
System.arraycopy(a, 0, newArray, 0, a.length);
return newArray;
}
如果只是希望扩大数组,直接利用Arrays类的copyOf方法即可。
/** 仅仅希望扩大数组 **/
private static Object[] increaseArr(Object[] a){
return Arrays.copyOf(a, a.length * 11 / 10 + 10);
}