Map集合结构的理解 [java]

Map结构的理解:

Map中存储的是键值对(也就是key — value),但是具体的key和value是如何存储的?

  • Map中对于键值对不是一个一个key和value单独进行存储的,而是通过先将key和value这两个值封装成为一Entry对象
    • key和value作为我们的Entry中的两个属性
    • 底层是一个一个Entry对象进行存储的
      • 所以我们也说我们的Map集合的底层是通过Entry[]进行存储的.
  • 也就是我们使用put(K key, V value)方法在HashMap对象中添加元素时,这个时候我们是以一个一个的Entry对象进行添加的
注意:这里我们使用Entry对象进行存储是jdk7.0中,在jdk8.0中我们是通过Node结点进行存储的
  • jdk7.0中 : Map通过Entry[] 进行存储
  • jdk8.0中 : Map通过Node[]进行存储

Map中的key: 无序的,不可重复的

  • 使用Set存储可以
    • 因为Set中存储的数据类型也是无序的,不可重复的
  • 这里由于我们的key是通过Set进行存储的,因为Set中存储的元素的模板类中要重写hashCode()和equals()方法
    • 我们重写hashCode()方法就是保证我们Set中存储的对象是内容不重复的,而不是地址不重复的

Map中的value: 无序的,可重复的

这个时候我们没有一种集合是专门存储无序的,可重复的

  • 使用Collection进行存储(Collection没有指明存储的元素的特点)

    • 因为没有一种专门的集合类是存储无序的,可重复的数据的,所以就使用Collection来存储
  • value中存储的数据的模板类中需要重写equals()方法

    • 这里因为我们是通过Collection进行存储的,而且我们的存储数据是可重复的,这个时候我们就不用判断存储数据是否重复,但是我们可能会使用Collection接口中的一些方法(比容contains(),而在我们contains()方法的底层是要使用equals()方法的),这些方法的底层可能会使用到equals()方法,所以我们的value中存储元素的模板类中需要重写equals()方法
  • 这里我们不使用List,因为List是存储有序的,可重复的数据

  • 我们也不使用Set,因为Set中是存储无序的,不可重复的数据

注意:多个key可以对应同一个value,但是多个value不可以对应同一个key

Entry是通过Set进行存储的

  • Entry是无序的,不可重复的

因为key是无序的,即使这个时候value是有序的,但这个时候的Entry还是无序的

因为key是不可重复的,即使这个时候value是可重复的,但是这个时候Entry还是不可重复的

总结:

  1. key是无序的,不可重复的
    • 通过Set进行存储
  2. value是无序的,可重复的
    • 通过Collection进行存储
  3. Entry是无序的,不可重复的
    • 通过Set进行存储
  • 也就是key和Entry的存储特征是一样的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值