set和map

set集合代表集合元素无序,集合元素不可以重复,map则代表一种由多个key-value对组成的集合,map类似于传统的关联数组,表面上他们之间的关联性很少,但是实际上map和set之间有莫大的关联,可以说map集合是set集合的扩展。
从map集合的继承体系和set集合的继承体系对比来看,这些map接口、实现类和set集合接口、实现类的类名完全相似,把map的后缀改成set后缀即可,set集合和map集合的对应关系如下:
1.Set —Map
2.EnumSet—EnumMap
3.SoretedSet—SortedMap
4.TreeSet—–TreeMap
5.NavigableSet—-NavigableMap
6.HashSet—HashMap
7.LinkedHashSet——-LinkedHashMap
这里写图片描述
这里写图片描述
仔细观察图3.2中Map集合的继承体系里被灰色覆盖的区域,可以发现,这些Map集合的接口、实现类的类名和Set集合的接口、实现类的类名完全相似,把Map后缀改为Set后缀即可。Set集合和Map集合的对应关系如下:
 Set←→Map
 EnumSet←→EnumMap
 SortedSet←→SortedMap
 TreeSet←→TreeMap
 NavigableSet←→NavigableMap
 HashSet←→HashMap
 LinkedHashSet←→LinkeHashMap

这些接口和类名如此相似绝不是偶然的现象,肯定有其必然的原因。

从表面上看,这两种集合并没有太多的相似之处,但如果只考察Map集合的key,不难发现,这些Map集合的key具有一个特征:所有的key不能重复,key之间没有顺序。也就是说,如果将Map集合的所有key集中起来,那么这些key就组成了一个Set集合。实际上,Map集合提供了如下方法来返回所有key组成的Set集合。

 Set keySet()

由此可见,Map集合的所有key将具有Set集合的特征,只要把Map的所有key集中起来看,那它就是一个Set,这实现了从Map到Set的转换。其实,还可以实现从Set到Map的扩展——对于Map而言,相当于每个元素都是key-value对的Set集合。

换一种思维来理解Map集合,如果把Map集合中的value当成key的“附属物”(实际上也是,对于一个Map集合而言,只要给出指定的key,Map总是可以根据该key快速查询到对应的value),那么Map集合在保存key-value对时只要考虑key即可。

对于一个Map集合而言,它本质上是一个关联数组,如图3.3所示。

对于图3.3所示的关联数组,其实可以改为使用一个Set集合来保存它们,反正上面关联数组中的key-value对之间有严格的对应关系,那么干脆将key-value对捆绑在一起对待,如图3.4所示。

为了把Set扩展成Map,可以考虑新定义一个SimpleEntry类,该类代表一个key-value对;当Set集合的集合元素都是SimpleEntry对象时,该Set集合就能被当成Map使用。下面程序示范了如何将一个Set集合扩展成Map集合。

程序清单:codes\03\3.1\Set2Map.java
class SimpleEntry

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值