package com.example.test6;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Arrays;import java.util.Iterator;/** * * 使用内部类的方式来实现ArrayList迭代器 * * 1. ArrayList的构造函数应该是 array = (T[]) new Object[initCapacity] * 而不是 array = new T[initCapacity[]; * * 2. 当删除ArrayList中数组元素的之后,将数组整体往前移动过程中, * 记得将数组size-1位置处引用值为空,帮助GC尽早释放资源 * */class ArrayList<T> implements Iterable<T>{ PRivate T[] array; private int size; public ArrayList() { this(10); } public ArrayList(int initCapacity){ array = (T[]) new Object[initCapacity]; size = 0; } public void add(T value){ if (size >= array.length){ array = Arrays.copyOf(array, array.length * 2); } array[size++] = value; } public void del(T value){ for (int i = 0; i < size; i++){ if (array[i].equals(value)){ System.arraycopy(array, i+1, array, i, size-i-1); size--; array[size] = null; } } } public T get(int index){ if (index < 0 || index >= size){ throw new IndexOutOfBoundsException(); } return array[index]; } public String toString(){ StringBuilder s = new StringBuilder(); s.append("["); for (int i = 0; i < size; i++){ s.append(array[i] + " "); } s.append("]"); return s.toString(); } @Override public Iterator<T> iterator() { // TODO Auto-generated method stub return new MyIterator(); } class MyIterator implements Iterator<T>{ private int index; public MyIterator(){ index = 0; } @Override public boolean hasNext() { // TODO Auto-generated method stub return index < ArrayList.this.size; } @Override public T next() { // TODO Auto-generated method stub return ArrayList.this.array[index++]; } /** * * 删除当前index下标处的元素 */ @Override public void remove() { // TODO Auto-generated method stub if (index >= size){ return; } System.arraycopy(array, index+1, array, index, size-index-1); size--; array[size] = null; } } }public class TestDemo { public static void main(String[] args) { // TODO Auto-generated method stub ArrayList<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < 15; i++){ list.add(i); } System.out.println(list); Iterator<Integer> it = list.iterator(); while (it.hasNext()){ it.remove(); } System.out.println(list); try { Class<?> c = Class.forName("com.example.test6.ArrayList"); Constructor<?>[] cons = c.getConstructors(); for (Constructor<?> con : cons){ System.out.println(con); } //通过反射调用构造函数生成类对象 //调用默认构造函数生成类对象 ArrayList<Integer> list1 = (ArrayList)c.newInstance(); for (int i = 0; i < 10; i++){ list1.add(i); } System.out.println(list1); //通过调用带参数的构造函数生成类对象 Constructor<?> con = c.getConstructor(int.class); ArrayList<Integer> list2 = (ArrayList<Integer>) con.newInstance(10); for (int i = 0; i < 10; i++){ list2.add(i); } System.out.println(list2); ////////////////////////////////////////////// //通过反射调用类的成员变量 Field[] fields = c.getDeclaredFields(); for (Field field : fields){ System.out.println(field); } Field field = c.getDeclaredField("size"); field.setaccessible(true); field.setInt(list2, 5); System.out.println(list2); /////////////////////////////////////////////// //通过反射调用类的成员方法 Method[] methods = c.getDeclaredMethods(); for (Method method : methods){ System.out.println(method); } Method method = c.getMethod("get", int.class); Integer value = (Integer) method.invoke(list2, 3); System.out.println(value); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
新闻热点
疑难解答