Map和Set(数据结构)

一、概念

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

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

  1. key 模型 ,比如:
    有一个英文词典,快速查找一个单词是否在词典中 快速查找某个名字在不在通讯录中
  2. Key-Value 模型 ,比如:
    ***统计文件中每个单词出现的次数,统计结果是每个单词都有与其对应的次数: < 单词,单词出现的次数 > (String,Integer)。
    ***梁山好汉的江湖绰号:每个好汉都有自己的江湖绰号(String,String)
    Map 中存储的就是 key-value 的键值对, Set 中只存储了 Key

二、Map

2.1Map简介

Map 是一个接口类,该类没有继承自 Collection ,该类中存储的是 <K,V> 结构的键值对,并且 K 一定是唯一的,不 能重复

2.2Map.Entry<K,Y>

Map.Entry<K, V> Map 内部实现的用来存放 <key, value> 键值对映射关系的内部类 ,该内部类中主要提供了<key, value>的获取, value 的设置以及 Key 的比较方式。
方法:getKey()------返回entry的Key
getValue()------返回entry的Value
setValue()------ 将键值对中的 value 替换为指定 value
注意: Map.Entry<K,V> 并没有提供设置 Key 的方法

2.3 Map****的常用方法

注意:

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

三、Set

3.1set的常用方法

boolean add (E e) ------添加元素,但重复元素不会被添加成功
void clear () ------清空集合
boolean contains (Object o)------判断 o 是否在集合中
Iterator<E> iterator () ------返回迭代器
boolean remove (Object o)------删除集合中的 o
int size() ------返回set 中元素的个数
boolean isEmpty() ------检测set 是否为空,空返回 true ,否则返回 false
Object[] toArray() ------将set 中的元素转换为数组返回
boolean containsAll(Collection<?> c) ------集合c 中的元素是否在 set 中全部存在,是返回 true ,否则返回false
boolean addAll(Collection<? extends E> c) ------将集合c中的元素添加到 set 中,可以达到去重的效果
注意点:

  1. Set 是继承自 Collection 的一个接口类
  2. Set 中只存储了 key ,并且要求 key 一定要唯一
  3. TreeSet 的底层是使用 Map 来实现的,其使用 key 与 Object 的一个默认对象作为键值对插入到 Map 中的
  4. Set 最大的功能就是对集合中的元素进行去重
  5. 实现 Set 接口的常用类有 TreeSet 和 HashSet ,还有一个 LinkedHashSet , LinkedHashSet 是在 HashSet 的基础上维护了一个双向链表来记录元素的插入次序。
  6. Set 中的 Key 不能修改,如果要修改,先将原来的删除掉,然后再重新插入
  7. TreeSet 中不能插入 null 的 key , HashSet 可以。
相关推荐
万象.12 分钟前
redis数据结构set和zset的基本指令
数据结构·数据库·redis
晚风吹长发6 小时前
初步了解Linux中的命名管道及简单应用和简单日志
linux·运维·服务器·开发语言·数据结构·c++·算法
夏乌_Wx6 小时前
练题100天——DAY42:移除链表元素 ★★☆☆☆
数据结构
学嵌入式的小杨同学10 小时前
【嵌入式 C 语言实战】交互式栈管理系统:从功能实现到用户交互全解析
c语言·开发语言·arm开发·数据结构·c++·算法·链表
多米Domi01110 小时前
0x3f 第40天 setnx的分布式锁和redission,写了一天项目书,光背了会儿八股,回溯(单词搜索)
数据结构·算法·leetcode
历程里程碑11 小时前
Linux 3 指令(3):进阶指令:文件查看、资源管理、搜索打包压缩详解
linux·运维·服务器·c语言·数据结构·笔记·算法
一分之二~12 小时前
二叉树--求最小深度(迭代和递归)
数据结构·c++·算法·leetcode·深度优先
wWYy.12 小时前
详解redis(8):数据结构Hash
数据结构·redis·哈希算法
智者知已应修善业12 小时前
【输出一个N*N的01矩阵,表示最后的汉字点阵图】2024-10-22
c语言·数据结构·c++·经验分享·笔记·算法·矩阵
uesowys13 小时前
华为OD算法开发指导-二级索引
数据结构·算法·华为od