c++ map 自定义排序_Java学习笔记:Map集合介绍

本文介绍了Java中的Map集合,包括HashMap、LinkedHashMap、TreeMap等子类的特点和用途。HashMap是最常用的集合,底层是哈希表,要求键重写hashCode和equals方法。LinkedHashMap结合哈希表和链表,保证存取顺序。TreeMap基于红黑树,支持自定义排序。同时,文章探讨了Map接口的方法和遍历方式。
摘要由CSDN通过智能技术生成

在介绍它之前先来看看再API文档中是如何介绍它的,看图片:

a8006135fc6d6d31ded488aa062bb36d.png

由图片可以看出,Map属于双列集合,每次可以添加一对数据,并且这两个数据具有映射关系。

单列集合和双列集合区别

e81077c0651080aa08947987e74d87f8.png

一、Map继承体系

e77b963fbf14e570fd3b0033d2de32a6.png

1.HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。哈希表控制键,键唯一。

2.LinkedHashMap:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。

3.TreeMap:TreeMap集合和Map相比没有特有的功能,底层的数据结构是红黑树;可以对元素的键进行排序,排序方式有两种:自然排序和比较器排序

4.利弊比较:

Hashtable被HashMap集合取代了 安全的,但是效率比HashMap低

ConcurrentHashMap属于多线程安全,效率低 比Hashtable效率高

二、Map接口的方法介绍

Map接口中定义了很多方法,常用的如下:

public V put(K key, V value):

把指定的键与指定的值添加到Map集合中。 说明:(1)执行put添加数据的时候,如果新添加的键不存在,那么此时直接添加,并返回null(2)执行put添加数据的时候,如果新添加的键存在,那么新添加的value覆盖之前旧的value,并返回旧的value

public V remove(Object key):

把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。

public V get(Object key):

根据指定的键,在Map集合中获取对应的值。

public SetkeySet():

获取Map集合中所有的键,存储到Set集合中。

public Set> entrySet():

获取到Map集合中所有的键值对对象的集合(Set集合)。说明:该方法表示获取Map集合中的所有的键值对,存放到单列集合Set中,键值对属于Map.Entry类型

public boolean containKey(Object key):

判断该集合中是否有此键。 如果包含返回true,否则返回false

 int size()

返回此映射中的键-值映射关系数。 集合长度

代码演示:

6f5819b37ded473d6072a1779280a0f5.png

65a0a911067c75974e95a31e18e16fbb.png

accce0246052c2eb740e4c8c20f091da.png

三、Map集合的遍历

1.使用keySet方法遍历(了解)

需要使用的方法:

public V get(Object key):

根据指定的键,在Map集合中获取对应的值。

public SetkeySet():

获取Map集合中所有的键,存储到Set集合中

f509bc31040a1fe2bfac41bbb52a864c.png

35bdfd405ec741c84fa9f1c9082d251e.png

2.使用entrySet方式遍历Map集合(掌握)

使用方法:

Map接口中的方法:

public Set> entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合)。

    说明:该方法表示获取Map集合中的所有的键值对,存放到单列集合Set中,   键值对属于Map.Entry

使用Map.Entry接口中的方法:

K getKey() 返回与此项对应的键。

V getValue()  返回与此项对应的值。

22b88cf517be6462a3da86cc01ad678b.png

45572911737026745402724757edde45.png四、Map常用子类

1.HashMap类

HashMap作为最常用集合之一,继承自Map。JDK8的HashMap实现与JDK7不同,新增了红黑树作为底层数据结构,结构变得复杂,效率变得更高。为满足自身需要,也重新实现了很多Map中的方法。

HashMap类底层是一个哈希表数据结构,控制键。要求HashMap键位置的对象所属类必须重写hashCode和equals方法。

929489bedf7154c9dbe85277f284f16c.png

小结:

1.HashMap属于jdk1.2之后才有的,替换了Hashtable,提高效率

2.底层哈希表数据结构控制键,所以要求键位置的对象所属类必须重写hashCode和equals方法

3.HashMap集合的键和值都可以是null,但是键位置只能是一个null

2.Hashtable类

Hashtable从jdk1.0就有了,它的安全性较高,但是效率低。底层是哈希表数据结构,控制键。该集合的键和值不允许是null,而从1.2开始后被HashMap取代了,HashMap效率更高。

代码演示:

a28033cf590be31bf97fdab51370ed67.png

3ef50b94bc379cc0874d2a8b3573b08c.png

3.LinkedHashMap

底层基于两个数据结构,分别为哈希表和双链表。哈希表的作用是存储数据保证数据唯一;双链表的作用为保证数据存储有序。

代码演示:

0937c29b9a023de57094f373ce56b803.png

4.TreeMap类

TreeMap底层基于红黑树结构,控制键,可以对键进行排序。具有排序方法看下面的构造方法:

1) TreeMap() 对键是大小升序,非自定义类(String Integer)按照大小升序排序

2)TreeMap(Comparator comparator) 根据键按照指定规则进行排序,

           参数:comparator属于自定义比较器接口Comparator类型,具体的排序规则由我们实现该接口的排序方法指定:

    int compare(T o1, T o2) 

           o1 - o2 升序

           o2 - o1 降序

代买演示:

298c46fe8e9268866e0d38e8fe55c2ca.png

a4aa024adaf4a647bee417838c6c3701.png

4df11d3032cc1f38bc2fd260b2e969bf.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值