黑马程序员 课后日记--泛型-Map集合

---------------------- android培训、 java培训、期待与您交流! ----------------------

今天讲了泛型和map集合。

晚上自习的时候就觉得早上的泛型听的不是很踏实,虽然都会用。晚上回来看了一点点视屏,发现早上的注意力不是非常集中,有些内容只是听入了耳朵,并没有听如大脑。早上需要投入更多的精力进去。

泛型:jdk1.5以后出现的安全机制。

好处

      1,将运行时期的问题classcastexception转到了编译时期。

      2,避免了强制转换的麻烦。

<>:什么时候用

      当操作的引用数据类型不确定的时候。就使用<>将要操作的引用数据类型传入即可。

      其实<>就是一个用于接受具体引用数据类型的参数范围。

在程序中,只要用到了带有<>的类或者结构,就要明确传入的具体引用数据类型。

新技术需要先学会用,再琢磨原理,形成自己的知识积累习惯,方便与以后的调用。

泛型技术是给编译器使用的技术。用于编译时期,确保了类型的安全。

运行时,会将泛型去掉,生成的class文件中是不带泛型的,这个称为泛型的擦除。擦除是为了兼容以前的类加载器。

编译器只做检查

补偿,根据元素获取类型,getClass(),元素类型进行转换

泛型补偿机制。

泛型的补偿:在运行时,通过获取元素的类型进行转换动作。不用使用者再强制转换了。

泛型类

什么时候用

当类中的操作的引用数据类型不确定的时候,就使用泛型类表示。

当方法静态时,不能访问类上定义的泛型,如果静态方法使用泛型,只能将泛型定义在方法上

不可以打印字符串长度,在定义时,不能使用具体方法,因为不知道具体传入的是什么类型的对象。只可以使用Object的方法

泛型的通配符:? 未知类型

泛型的限定

可以对类型进行限定:

extends e:接受e类型或者e的子类型对象。上限。

super e:接受E类型或者e的父类型。下限

迭代器的泛型和方法获取的泛型一致

取的时候Person类能接受student类,不会产生安全问题

一般定义存的时候用上限可以扩展类型,父类可以传入,子类也可以传入

一般在储存元素的时候都用上限,因为这样取出都是按照上限类型来运算的。不会出现类型安全隐患

什么时候用下限:通常对集合中的元素进行取出操作时,可以使用下限。

如果泛型中写了T,那么方法都要用到T类型进行转换,跟没写是有区别的

对于问号,仅对不确定类型,并不对这个类型进行操作

集合的一些技巧:

需要唯一吗

需要:set

     需要指定顺序:

              需要:TreeSet

              不需要:HashSet

              但是想要一个和存储一致的顺序(有序):LinkedHashSet

不需要:List

         需要频繁增删吗?

              需要:linkedList

              不需要:ArrayList

如何记住每一个容器的机构和所属体系

看名字

List

     |--ArrayList

     |--LinkedList

Set

     |--HashSet

     |--TreeSet

后缀名就是该集合所属的体系。

前缀名就是该体系的数据结构。

看到Array:就要数组,就要想到查询快,有角标。

看到link:就要想到链表,就要想到增删快,就要想到add get remove+first last的方法

看到hash:就要想到hash表,就要想到唯一性,就要想到元素需要覆盖hashcode方法和equals方法

看到tree:就要想到二叉树,就要想到排序,就要想到两个接口comparablecomparator

而且通常这些常用的集合容器都是不同步的。

Map:一次添加一对元素。Collection一次添加一个元素。

Map集合也称为双列集合,collection集合称为单例集合。

其实map集合中储存的就是键值对

Map集合中必须保证键的唯一性

常用方法:

1,添加

     Value put(key,value)返回前一个和key关联的值,如果没有返回null

2,删除

     Void clear();清空map集合

Value remove(key):根据指定的key删除这个键值对。

3,判断

     Boolea containsKey(key)

     Boolean containsValuevalue

     Boolean isEmpty();

4,获取

    Value getkey):通过键获取值,如果没有该键返回null

     当然可以通过返回null,来判断是否包含指定键。

     Int size():获取键值对的个数。

存相同键,值会覆盖

Integar存的方式和哈希表的方式一样

原理,通过keySet方法获取map中所有的键所在的set集合,再通过set的迭代器获取到每一个键,再对每一个键获取其对应的值即可

EntrySet,类型map.entry类型

Map常用的子类

     |--Hashtable:内部结构是哈希表,是同步的。不允许null作为键,null作为值

         |--Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合。

     |--hashmap:内部结构哈希表,不是同步的。允许null作为键,null作为值

     |--Treemap:内部结构是二叉树,不是同步的。可以对Map集合中的键进行排序。

---------------------- android培训、 java培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net/heima

你可能感兴趣的:(黑马程序员 课后日记--泛型-Map集合)