Java 集合之 Map

 Map简介

需要注意,这里的Map单词并不是“地图”的意思,而是“映射”的意思。

Java中的集合可以看成两大类。第一类是Collection,用于单值存储,也就是说一次只能一个int、char、Object等等。第二类就是Map,它用于双值存储,其中的“双值”就是我们所说的“键值对”。为方便理解“键值对”,可以把它类比成一把钥匙对一把锁,其中键就是钥匙,值(数据)对应的就是锁。如果想要访问一个数据,只能通过它对应的那个“钥匙”来得到。

Map类对象,用来将“键”映射到“值”,并且一个Map中不能包含重复的键每个键只能映射一个值。Map的子类中,比较常用的有:HashMap、TreeMap、LinkedHashMap。

 

与Set的关系

Set的子类,就是基于Map实现的,像HashSet基于HashMap,TreeSet基于TreeMap。但是为什么Set会基于Map实现呢?我们都知道,Set集合不能存在重复的元素,而这个效果就是依靠Map中“不能包含重复的键”的这种特性实现的,Set将数据存储在Map中的“键”的位置,这样的话,如果Set新增了一条重复数据,Map就会发现自己即将出现重复的键,就不添加这个数据,从而实现了Set集合不能存在重复的元素。

 

常用方法

1. V put(K key, V value)

用于添加一个键值对。

需要注意的是,这里的返回值。如果添加的键已经存在,则会用新的值覆盖原来这个键对应的旧值,并且把旧值返回出来。如果添加的键不存在,返回null。

2.void putAll(Map<? extends K, ? extends V> m)

用于添加一组键值对。

3.V remove(K key)

通过制定键,来删除对应的键值对。删除的值会被返回。

4.boolean remove(K key, V value)

通过制定键和值,来删除对应的键值对,只有键和值都匹配才会删除,否则不会删除。

5.Set<K> keySet()

以Set形式返回此Map中的所有的键。

6.void clear()

清空所有键值对。

7.boolean containsKey(Object key)

判断Map中是否有指定键。

8.boolean containsValue(Object value)

判断Map中是否有指定键。

9.get(Object key)

通过指定键获取值。

 

五个子类的特点

1.HashMap

HashMap线程不安全,但是效率高。

2.Hashtable

Hashtable线程安全,效率低。

3.ConcurrentHashMap

ConcurrentHashMap使用了分段锁机制,使它线程安全,效率也相对较高。

分段锁机制:

分段锁机制意思就是,在这个Map的哈希表被多线程访问时,哈希表只会锁住被访问的哈希桶,而非锁住整个哈希表,这样如果有线程在访问这个哈希表的时候,其他线程可以访问其他的哈希桶,而不是绝对不能访问这个哈希表。

例如,如果线程1正在访问0下标处的哈希桶,那么其他线程可以访问下标为1、2、3 。 。 。的哈希桶。

4.TreeMap

TreeMap区别于其他Map,它底层使用二叉树实现,并且它里面的元素是有序的。

5.LinkedHashMap

LinkedHashMap可以看成是有序的HashMap,它是HashMap的子类,并且基于链表实现了元素有序。

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值