文章迁移(四)

只要是对象就能往集合里面装,这是集合的一大特点,同时却也存在着安全隐患,举个很简单的例子,我集合里一通乱存瞎搞,什么类型的值都往里塞,当我取出元素时指定接收类型为Integer,例如:

        List list = new ArrayList();

        list.add("haha");

        list.add(1);

        list.add(2);

        list.add("heiehi");

       

        for(Iterator it = list.iterator();it.hasNext();){

            Integer in = (Integer)it.next();

            System.out.println(in);

       }

这段代码在编译时期是不会报错的,但是很显然运行时期会抛出异常ClassCastException,对于开发人员来说,用户才是上帝,你在运行时期给人家抛异常不是找死吗?于是,jdk自1.5版本以后出现了泛型,来解决这一问题。

因为容器什么都可以装,而容器本身是不具备描述自身存储类型的能力的,所以我们需要给容器指定一种类型,以避免运行时出现异常(ClassCastException),而指定类型这件事就需要泛型来完成。

()被参数列表用了,[]被数组用了,{}被代码块用了,别着急,我们用<>来定义泛型,泛型不可以指定基本数据类型,只能是封装类和自定义对象,例如上面的list容器

List<Integer> list = new ArrayList<Integer>();

集合list就被指定只能存储Integer类型的元素,你如果敢存别的我就不让你运行,编译时期就让你程序挂掉,这个有点狠,但是安全。

目前来说,泛型已经被主流市场接受,所以以后不管集合还是映射,都先把泛型指定好,要养成习惯。

Map,映射。学过英语的人都知道map有“地图”的意思,地图上的一块区域对应着现实世界的相同区域,其实一张地图就是一个一对一的映射关系图。

Map是与Collection同级的集合根接口,与Collection不同,Map一次添加一对元素,因此Map集合也称为双列集合。其实Map集合中存储的是键值对,一个映射不能包含重复的键,每个键最多只能映射到一个值,必须保证键的唯一性。

Map没有自己的 获取迭代器的方法,但是可以通过keySet()(这个方法会返回一个Set集合,这个集合中存储的是Map的键,所以这个Set集合又被称为键集)或entrySet()(这个方法将Map的每一对映射关系当成元素存放到Set集合中返回)将map集合转成单列集合,再用迭代器遍历即可。

Map下最为常用的子类当属HashMap和TreeMap,是不是感觉很熟悉,Map集合体系和Set非常相像,如果感兴趣可以看HashSet的源码,其中很多方法的实现依据都是基于HashMap的。

好啦,就到这吧,其实个人认为Map集合应用最多,但是我写的却很少,这和实践太少有关,以后有机会再补充自己对集合和映射的深入理解,下面是自己做的集合体系框架图,重温一下

第八篇:集合框架之Map映射

posted @ 2017-12-18 15:36  谈笑千年  阅读(127)  评论(0编辑  收藏  举报