import java.lang.reflect.Array; /** * 泛型动态数组类 * */ public class DynamicArray<T extends Object>{ private T[] arr; private Class<T> type; private int currCount; private static final int InitSize=2; public DynamicArray(Class<T> type){ this.type = type; arr=createArray(InitSize); } /** * 在java中,不能通过直接通过T[] tarr=new T[10]的方式来创建数组,最简单的方式便是通过Array.newInstance(Class<t>type,int size)的方式来创建数组 * 详情请参考http://developer.51cto.com/art/201202/317813.htm * @param size * @return */ @SuppressWarnings("unchecked") private T[] createArray(int size) { return (T[]) Array.newInstance(type, size); } public void add(T number){ if(currCount>=arr.length){ // 实际数量已经超过数组长度,需要扩容 T[] arrNew=createArray(arr.length*2);// 扩容 // 填充原值 for(int j=0;j<arr.length;j++){ arrNew[j]=arr[j]; } // 原有数组空间放弃,arr指向新创建的数组空间(创建在堆中) arr=arrNew; arr[currCount]=number; currCount++; }else{ // 无需扩容 arr[currCount]=number; currCount++; } } public void display(){ System.out.print("动态数组合法元素为:"); for(int i=0;i<currCount;i++){ System.out.print(arr[i]+","); } System.out.println(); } public void displayAll(){ System.out.print("动态数组所有元素为:"); for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+","); } System.out.println(); } public T[] getArray(){ T[] arrOutput=createArray(currCount); for(int i=0;i<currCount;i++){ arrOutput[i]=arr[i]; } return arrOutput; } public T get(int index){ return arr[index]; } public static void main(String[] args){ DynamicArray<Integer> d=new DynamicArray<Integer>(Integer.class); d.add(1); d.add(2); d.add(3); d.add(4); d.add(5); d.add(6); d.add(7); d.add(8); d.add(9); d.display(); d.displayAll(); Integer[] arrOutput=d.getArray(); System.out.print("arrOutput:"); for(int i=0;i<arrOutput.length;i++){ System.out.print(arrOutput[i]+","); } System.out.println(); System.out.println("第8号元素为"+d.get(8)); DynamicArray<String> d2=new DynamicArray<String>(String.class); d2.add("红尘多可笑"); d2.add("痴情最无聊"); d2.add("目空一切也好"); d2.add("此生未了"); d2.add("心却已无所扰"); d2.add("只想换得半世逍遥"); d2.add("醒时对人笑"); d2.add("梦中全忘掉"); d2.add("叹天黑得太早"); d2.add("来生难料"); d2.add("爱恨一笔勾销"); d2.add("对酒当歌 我只愿开心到老"); d2.add("风再冷 不想逃"); d2.add("花再美也不想要"); d2.add("任我飘摇"); d2.add("天越高 心越小"); d2.add("不问因果有多少"); d2.add("独自醉倒"); d2.add("今天哭 明天笑"); d2.add("不求有人能明了"); d2.add("一身骄傲"); d2.add("歌在唱 舞在跳"); d2.add("长夜漫漫不觉晓"); d2.add("将快乐寻找"); d2.add("PS:笑红尘就是人生真谛的体现,也是应对生活应该采取的态度。学会洒脱得微笑,生活中就不会有过不去的坎坷。"); d2.display(); d2.displayAll(); } }
输出:
动态数组合法元素为:1,2,3,4,5,6,7,8,9, 动态数组所有元素为:1,2,3,4,5,6,7,8,9,null,null,null,null,null,null,null, arrOutput:1,2,3,4,5,6,7,8,9, 第8号元素为9 动态数组合法元素为:红尘多可笑,痴情最无聊,目空一切也好,此生未了,心却已无所扰,只想换得半世逍遥,醒时对人笑,梦中全忘掉,叹天黑得太早,来生难料,爱恨一笔勾销,对酒当歌 我只愿开心到老,风再冷 不想逃,花再美也不想要,任我飘摇,天越高 心越小,不问因果有多少,独自醉倒,今天哭 明天笑,不求有人能明了,一身骄傲,歌在唱 舞在跳,长夜漫漫不觉晓,将快乐寻找,PS:笑红尘就是人生真谛的体现,也是应对生活应该采取的态度。学会洒脱得微笑,生活中就不会有过不去的坎坷。, 动态数组所有元素为:红尘多可笑,痴情最无聊,目空一切也好,此生未了,心却已无所扰,只想换得半世逍遥,醒时对人笑,梦中全忘掉,叹天黑得太早,来生难料,爱恨一笔勾销,对酒当歌 我只愿开心到老,风再冷 不想逃,花再美也不想要,任我飘摇,天越高 心越小,不问因果有多少,独自醉倒,今天哭 明天笑,不求有人能明了,一身骄傲,歌在唱 舞在跳,长夜漫漫不觉晓,将快乐寻找,PS:笑红尘就是人生真谛的体现,也是应对生活应该采取的态度。学会洒脱得微笑,生活中就不会有过不去的坎坷。,null,null,null,null,null,null,null,