首页 > 代码库 > 爪哇国新游记之十五----泛型动态数组类

爪哇国新游记之十五----泛型动态数组类

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,