第九章容器 泛型

容器(有序,无序,键值对)

9.1 泛型Generics

我们一般通过“容器”来容纳和管理数据。

我们第七章所学的数组就是一种容器,可以在其中放置对象或基本类型数据。

数组的优势:是一种简单的线性序列,可以快速地访问数组元素,效率高。如果从效率和类型检查的角度讲,数组是最好的。

数组的劣势:不灵活。容量需要事先定义好,不能随着需求的变化而扩容。比如:我们在一个用户管理系统中,要把今天注册的所有用户取出来,那么这样的用户有多少个?我们在写程序时是无法确定的。因此,在这里就不能使用数组。

我们需要一种更强大、更灵活、容量随时可扩的容器来装载我们的对象。 这就是我们今天要学习的容器,也叫集合(Collection)。

 

9.1.1 自定义泛型

我们可以在类的声明处增加泛型列表,如:<T,E,V>,字符可以是任何标识符,一般采用这3个字母。

泛型类的声明

class MyCollection<E> {// E:表示泛型;
    Object[] objs = new Object[5];
    public E get(int index) {// E:表示泛型;
        return (E) objs[index];
    }
    public void set(E e, int index) {// E:表示泛型;
        objs[index] = e;
    }
}

泛型E像一个占位符一样表示“未知的某个数据类型”,我们在真正调用的时候传入这个“数据类型”。

泛型类的应用

public class TestGenerics {
    public static void main(String[] args) {
        //String就是实际传入的数据类型
        MyCollection<String> mc = new MyCollection<String>();
        mc.set("aaa", 0);
        mc.set("bbb", 1);
        String str = mc.get(1); //加了泛型,直接返回String类型,不用强制转换
        System.out.println(str);
    }
}

 

9.1.2 容器中使用泛型

容器相关类都定义了泛型,在使用容器类时都要使用泛型,在容器的存储数据、读取数据时都避免了大量的类型判断,非常便捷。

泛型类在集合中的使用

public class Test {
    public static void main(String[] args) {
        //List、Set、Map、Iterator都是与容器相关的接口
        List<String> list = new ArrayList<String>();
        Set<Man> mans = new HashSet<Man>();
        Map<Integer, Man> maps = new HashMap<Integer, Man>();
        Iterator<Man> iterator = mans.iterator();
    }
}

Collection、List、Set、Map、Iterator接口都定义了泛型

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值