@Test
public void save() throws Exception {
ArrayList<Integer> integerList = new ArrayList<Integer>();
for (int i = 0; i <20; i++) {
integerList.add(i);
}
integerList.remove(10);
int index=1;
for(Integer integer:integerList){
System.out.println("index"+index+++"value"+ integer.toString());
}
System.out.println("size:" + integerList.size() + ",capacity:" + ((Object[])ReflectUtil.getFieldValue(integerList,"elementData")).length);
}
package cn.gtmap.cc.landjs.utils;
import java.lang.reflect.Field;
/**
* Created by JIFF on 2016/11/26.
*/
public class ReflectUtil {
/**
* 利用反射获取指定对象的指定属性
* @param obj 目标对象
* @param fieldName 目标属性
* @return 目标属性的值
*/
@SuppressWarnings("unchecked")
public static <T> T getFieldValue(Object obj, String fieldName) {
Object result = null;
Field field = ReflectUtil.getField(obj, fieldName);
if (field != null) {
field.setAccessible(true);
try {
result = field.get(obj);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return (T)result;
}
/**
* 利用反射获取指定对象里面的指定属性
* @param obj 目标对象
* @param fieldName 目标属性
* @return 目标字段
*/
private static Field getField(Object obj, String fieldName) {
Field field = null;
for (Class<?> clazz=obj.getClass(); clazz != Object.class; clazz=clazz.getSuperclass()) {
try {
field = clazz.getDeclaredField(fieldName);
break;
} catch (NoSuchFieldException e) {
//这里不用做处理,子类没有该字段可能对应的父类有,都没有就返回null。
}
}
return field;
}
/**
* 利用反射设置指定对象的指定属性为指定的值
* @param obj 目标对象
* @param fieldName 目标属性
* @param fieldValue 目标值
*/
public static void setFieldValue(Object obj, String fieldName,
String fieldValue) {
Field field = ReflectUtil.getField(obj, fieldName);
if (field != null) {
try {
field.setAccessible(true);
field.set(obj, fieldValue);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
针对
1.1 基于数组的ArrayList测试结果
index1value0
index2value1
index3value2
index4value3
index5value4
index6value5
index7value6
index8value7
index9value8
index10value9
index11value11
index12value12
index13value13
index14value14
index15value15
index16value16
index17value17
index18value18
index19value19
size:19,capacity:22
size:数组中已经存放的元素的数量 capacity:ArrayList的实际容量