码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-07-25 14:01:11      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   java   color   for   art   re   

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,

爪哇国新游记之十五----泛型动态数组类,布布扣,bubuko.com

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

标签:style   blog   http   java   color   for   art   re   

原文地址:http://www.cnblogs.com/xiandedanteng/p/3867640.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!