-----------------------------------------------------------------android培训、java培训、期待与您交流! ---------------------------------------------------------------
泛型
一、泛型:JDK1.5之后出现的新特性。用于解决安全问题,是一个类型安全机制
好处:
1. 将运行时期出现的ClassCastException,转移到了编译时期。
方便程序员解决问题,让运行时期问题减少,安全
2. 避免了强制转换麻烦
二、泛型格式:通过<>来定义要操作的引用数据类型
在使用java提供的对象时,什么时候使用泛型?
通常在集合框架中很常见,只要见到<>就要定义泛型
三、泛型类
在没有泛型之前,即在JDK1.5之前,要定义操作多个不确定的引用数据类型时(例如即可以操作Work对象又可以操作Student对象,以后可能还可以操作其他对象),因为无法确定所以可以使用Object类的引用来扩展该类。但是在具体使用时需要转换成具体的类,并且如果类型错误,只有在运行期才能发现错误,安全性降低了。所以可以使用泛型来提高其安全性,错误就可在编译时期发现。
所以什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候。
总结:
1. 早期定义Object来完成扩展— 使用具体对象时需要强转
2. 现在定义泛型来完成扩展 — 使用具体对象时不需要强转,且把问题转到编译时期,安全
四、泛型方法
与泛型类的原理相同,可以定义泛型方法,在后期使用时再指定具体类型。提高安全性。
特殊之处(静态方法泛型):
静态方法不可以访问类上的泛型,如果静态方法在操作的应用数据类型不确定,可以将泛型定义在方法上。
五、泛型接口------同泛型类、泛型方法
六、高级应用:泛型限定
?通配符(类似于 ?extends Object)
?extends E :可以接收E类型或者E类型的子类,上限为E
?super E :可以接收E类型或者E类型的父类,下限为E
一、Map<K, V>
该集合以键值对方式存储,需要保证键的唯一性。
Map
|--Hashtable:底层是哈希表数据结构,不可以存入null键和null值,JDK1.0,线程同步
|--HashMap:底层是哈希表数据结构,允许使用null键和null值,JDK1.2,线程不同步
|--TreeMap:底层是二叉树数据结构,线程不同步。可以用于给map集合中的键进行排序
和Set很像,其实Set集合底层使用了Map集合
二、 Map共性方法
1. 添加
put(K key,V value) :如果添加元素是相同的键,后一个会覆盖原值,并且put会返回被覆盖的值
putAll(Map<?extends K, ? extends V> m)
2. 删除
clear()
remove(Objectkey)
3. 判断
containsValue(Objectvalue)
containsKey(Objectkey)
isEmpty()
4. 获取
get(Objectkey)
size()
values()
entrySet()
keySet()
三、 map集合的两种去除方式
1. Set<> keyset :将map中所以的键存入Set集合。因为Set具备迭代器,迭代出所有的键,再通过map的get方法获取值
2.Set<Map.Entry<K,V>> entrySet :返回的是关系Map.Entry,通过迭代获取所有Map.Entry,通过方法getValue和getKey获取值和键
什么是Map.Entry?
Map是一个接口,Entry也是一个接口,而通过Map.Entry访问Entry说明Entry是Map的一个内部接口。因为只有Map存在,Entry才有意义,所以定义在Map的内部接口。