数据结构(Java):Map集合&Set集合&哈希表

目录

1、介绍

1.1 Map和Set

1.2 模型

2、Map集合

2.1 Map集合说明

2.2 Map.Entry<K,V>

2.3 Map常用方法

2.4 Map注意事项及实现类

 3、Set集合

3.1 Set集合说明

 3.2 Set常用方法

 3.3 Set注意事项及其实现类

4、TreeMap&TreeSet

4.1 集合类TreeMap(Key-Value模型)

4.1.1 底层结构

4.2 集合类TreeSet(纯Key模型)

4.2.1 底层结构

4.3 TreeMap与TreeSet之间的关系

4.3.1 再谈TreeSet之构造方法

 4.3.2 再谈TreeSet之add方法

4.4 TreeMap&TreeSet总结

 5、哈希表

5.1 概念

5.2 冲突-概念

5.2 冲突-避免

5.2.1 设计合理的哈希函数

 5.2.2 调节负载因子

5.3 冲突-解决

5.3.1 闭散列

 5.3.2 🌟开散列/哈希桶/开链法

5.4 HashMap&HashSet

5.4.1 hashCode与equals方法

5.5 性能分析

5.6 总结


1、介绍

1.1 Map和Set

Map和Set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。

Map和Set能够在查找时进行一些插入和删除的操作,即动态查找。

1.2 模型

一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-value的键值对,所以模型会有两种:

  1. 纯Key模型:数据仅包含关键字。
  2. Key-Value模型:数据除关键字外,还有关键字所对应的值。例如:统计文件中每个单词出现的次数,统计结果是每个单词都有与其对应的次数:<单词,单词出现的次数>。

 Map集合是Key-Value模型;而Set集合是纯Key模型。


2、Map集合

2.1 Map集合说明

Map是一个接口类,该接口没有继承自Collection,是一个单独的接口,为Key-Value模型,存储的是<K,V>结构的键值对,并且K一定是唯一的,不能重复。  (K不可重复,V可重复)

2.2 Map.Entry<K,V>

Entry是Map接口的一个内部接口是用来存放<Key,Value>键值对映射关系的内部接口

内部接口Map.Entry<K,V>主要提供了<Key,Value>的获取,Value的设置以及Key的比较方式。

注意:Map.Entry<K,V>并没有提供设置Key的方法 !!!Key无法修改!!!

同样,实现Map接口的类也需要实现Entry接口:

这里以TreeMap的内部类Entry为例,Entry实现了的Map.Entry接口,而Entry就相当于我们之前所学二叉树的一个节点TreeNode。

TreeMap的底层是一个红黑树(下文详解),TreeMap的内部类Entry就相当于红黑树的一个节点,有key、value等属性。

2.3 Map常用方法

 演示如下:

若我们使用get方法来获取一个不存在的key的value值时,返回的value为null,

所以当value为Integer类型时,最好使用包装类Integer接收,若使用int基本类型接收会自动拆箱,可能抛出空指针异常:

需要注意的是keySet、values、entrySet方法:

  • keySet,可以将key值放在Set集合中,返回Set集合;
  • values,可以将value值放在Collection集合中,返回Collection集合;
  • entrySet,可以将key-value映射关系放在Set集合中,返回Set集合。

注意:Map系列集合是不能用迭代器实现遍历的,若想使用迭代器遍历,需要使用keySet、values、entrySet方法转换为Set集合,再使用迭代器遍历!!!

2.4 Map注意事项及实现类

  1. Map是一个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeMap或者HashMap
  2.  Map中存放键值对的Key不能重复,value是可以重复的
  3. 在TreeMap中插入键值对时,key不能为空,否则就会抛NullPointerException异常,value可以为空。(TreeMap底层是一颗红黑树,涉及key之间的比较)
  4. HashMap的key和value都可以为空。
  5. Map中的Key可以全部分离出来,存储到Set中来进行访问(Key不能重复)。
  6. Map中的value可以全部分离出来,存储在Collection的集合中,若要存储在Collection的子集合中则需强转(value可以有重复)。
  7. Map中键值对的Key不能直接修改,value可以修改,如果要修改key,只能先将该key删除掉,然后再来进行重新插入。 
  8. TreeMap和HashMap是实现Map的集合类

 TreeMap与HashMap:

下文细讲TreeMap与HashMap。 


 3、Set集合

3.1 Set集合说明

Set集合是纯Key模型,也就是说,Set只存储了Key。

Set集合中的Key值也不能重复存在,能够达到天然去重的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值