java基础之泛型,Map集合

泛型:

 

JDK1.5版本以后出现的新特性。用于解决安全问题,是类型一个安全机制。

 

好处:

<!--[if !supportLists]-->1.<!--[endif]-->将运行时期出现问题ClassCastException,转移到了编译时期。

<!--[if !supportLists]-->a) <!--[endif]-->方便与程序员解决问题。让运行事情问题减少,安全。

<!--[if !supportLists]-->2.<!--[endif]-->避免了强制转换麻烦。

泛型类:

什么时候定义泛型类?

当类中要操作的引用数据类型不确定的时候

早期定义Object来完成扩展,  现在定义泛型来完成扩展

泛型方法:

泛型类定义的泛型,在整个类中有效,如果被方法使用,

那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。

 

为了让不同方法可以操作不同类型,而且类型还不确定。

那么可以将泛型定义在方法上。

 

在方法上定义泛型 ,<  >放在返回值前面。

 

特殊之处:

静态方法不可以访问类上定义的泛型。

如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。

----------------------------------------------------------------------------------------------------------------------

Map

 

Map集合:该集合存储键值对。 一对一对往里存。而且要保证键的唯一性。

<!--[if !supportLists]-->1.<!--[endif]-->添加、

<!--[if !supportLists]-->a) <!--[endif]-->put(K key, V value)

<!--[if !supportLists]-->b) <!--[endif]-->putAll(Map<? extends K,? extends V> m)

<!--[if !supportLists]-->2.<!--[endif]-->删除、

<!--[if !supportLists]-->a) <!--[endif]-->clear(); / /  移除

<!--[if !supportLists]-->b) <!--[endif]-->remove(Object key)

<!--[if !supportLists]-->3.<!--[endif]-->判断、

<!--[if !supportLists]-->a) <!--[endif]-->containsValue(Object value)

<!--[if !supportLists]-->b) <!--[endif]-->containsKey(Object key)

<!--[if !supportLists]-->c) <!--[endif]-->isEmpty()

<!--[if !supportLists]-->4.<!--[endif]-->获取、

<!--[if !supportLists]-->a) <!--[endif]-->get(Object key)

<!--[if !supportLists]-->b) <!--[endif]-->size()

<!--[if !supportLists]-->c) <!--[endif]-->values()

 

Map

|----Hashtable:底层是哈希表数据结构,不可存入null键、值,该集合线程同步的。JDK1.0,效率低

|----HashMap:底层是哈希表数据结构,可存入null键、值,该集合线程不同步的。

JDK1.2,效率高

|----TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合中的键排序。

 

和Set很像。__________________-其实,Set底层就是勇士了Map集合。

----------------------------------------------------------------------------------------------------------------------

map集合的两种取出方式:

 

 

<!--[if !supportLists]-->1.<!--[endif]-->Set<k>  keySet:将map中所有的键存入到Set集合。因为set具备迭代器。

所以可以迭代方式取出所有的键,在根据get方法,获取每一个键对应的值。

Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。

<!--[if !supportLists]-->2.<!--[endif]-->Set<Map.Entry<k,v>> entrySet:将Map集合中的映射关系存入到了set集合中,

而这个关系的数据类型就是:Map.Entry

 

Map.Entry:  其实Entry也是一个接口,它是Map接口中的一个内部接口(且是public的和static的)。  (同内部类)。

 

什么时候使用map集合呢?

当数据之间存在着映射关系时,就要先想到map集合。

Collections有个shuffle方法,可以把list集合的元素随机排放(同扑克洗牌)。

集合变数组。

Collection接口中的toArray方法。

<!--[if !supportLists]-->1.<!--[endif]-->执行类型的数组到底要定义多长呢?

当指定类型的数组长度小于集合的size,那么该方法内部会创建一个新的数组,长度为集合的size。

当指定类型的数组长度大于集合的size,就不会新创建了数组,而是使用传递进来的数组。

所以创建一个刚刚好的数组最优。

<!--[if !supportLists]-->2.<!--[endif]-->为什么要将集合变数组?

为了限定对元素的操作。不需要进行增删了

 

<!--EndFragment-->

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值