常见Java集合的实现细节(一)

    常用的Java集合有三种Set、Map和List,那么它们之间有什么关系呢?

一、Set和Map

    Set是一种集合元素无序且不可重复的集合,Map代表一种由多个键值对组成的集合,其中键值不可重复,Map集合其实类似于传统的关联数组。表面上看这两个集合之间相似性很少,实际上他们之间有莫大的关联,可以说Map集合是Set集合的扩展。
1、Set和Map的关系
    表面上看这两个及合并没有太多的相似之处,但如果只考察Map集合的key,不难发现,这些Map的key具有一个特征:不能重复且无序。也就是说,如果将Map集合的所有key集中起来,这些key就组成了一个Set集合。如果查API文档会发现Map集合提供了Set<K> keySet()这个方法返回所有key组成的Set集合。
    由此可见,Map的所有key具有Set集合元素的特征,其实,还可以实现从Set到Map的扩展--对于Map而言,相当于每个元素都是key-value的Set集合。对于一个Map集合而言,它本质上是一个关联数组。
2、HashMap和HashSet
 
 
   
    HashMap和HashSet有很多相似之处。对于HashSet而言,系统采用Hash算法决定集合元素的存储位置,这样可以保证快速存取集合元素;对于HashMap而言,系统将value当成key的附属,系统根据Hash算法来决定key的存储位置,这样可以保证快速存取集合key而value总是紧随key存取。
    在这里需要指出一点:虽然集合号称存储的是Java对象,但实际上不会真正将Java对象放入Set集合中,而只是在Set集合中保留这些对象的引用而已。也就是说,Java集合实际上是多个引用变量所组成的集合,这些引用变量指向实际的Java对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值