黑马程序员_集合框架2

-----------------------------------------------------------------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的内部接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值