【泛型】案例讲解:自定义一个可以存放指定数据的容器

来源:互联网 发布:网络布线 价格 编辑:程序博客网 时间:2024/06/06 09:53

案例介绍:

要求自定义一个容器,次容器可以存放指定类型的数据,通过泛型来实现

案例设计:
- 设计定义一个泛型类
- 设计add方法给容器添加数据
- 设计get方法获取容器中指定位置的数据
- 设计size方法获取容器中数据的多少
- 要求容器超过容量要自动扩容

Code Demo:

package Genericity;import java.util.Arrays;public class ContainerDemo {    public static void main(String[] args) {        // TODO Auto-generated method stub        IContainer<String> list=new Container<String>();        for(int i=0;i<9;i++){            list.add("String"+i);        }        list.print();    }}interface IContainer<T>{    public void add(T obj);    public void print();    public T get(int index);    public int size();}class Container<T> implements IContainer<T>{    //不能创建泛型数据,所以可以创建一个object类型的数组    private Object[] list=null;    public int size=0;    //初始大小为10    public Container(){        list=new Object[10];    }    //指定容器的大小    public Container(int capacity){        list=new Object[capacity];    }    public T get(int index) {        return  (T)list[index-1];    }    public void add(T obj) {        ensureCapacity(size+1);        list[size++]=obj;    }    public int size(){        return size;        }    private void ensureCapacity(int size){        if(size>0.8*list.length){            //扩容为原有容量的1.5倍            int oldCapacity=list.length;            int newCapacity=oldCapacity+(oldCapacity>>1);            list=Arrays.copyOf(list, newCapacity);        }    }    public void print(){        for(int i=0;i<size;i++){            System.out.println("String:"+i);        }    }}
0 0