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


    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,
  • 相关阅读:
    Java程序员必备后台前端框架--Layui【从入门到实战】(一)
    Java程序员必备后台前端框架--Layui【从入门到实战】(三)
    Java程序员必备后台前端框架--Layui【从入门到实战】(二)
    机器学习平台和深度学习平台
    python资源
    Wireshark使用入门(转)
    xxxxxxxxxxxxxxxxxxx
    大众字体
    起点字体
    pycharm调试技巧
  • 原文地址:https://www.cnblogs.com/heyang78/p/3867640.html
Copyright © 2020-2023  润新知