今天讲了泛型和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:就要想到二叉树,就要想到排序,就要想到两个接口comparable,comparator。
而且通常这些常用的集合容器都是不同步的。
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 containsValue(value)
Boolean isEmpty();
4,获取
Value get(key):通过键获取值,如果没有该键返回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