梦应逍遥 发表于 2024-9-9 01:44:48

Map&Set之相关概念

  系列文章:
                 1.   先导片--Map&Set之二叉搜刮树
                 2.   Map&Set之相关概念
                 3.   哈希表如何避免辩论
目录
1.搜刮
1.1 概念和场景
1.2 模子
2.Map的利用
2.1 关于Map的分析
2.2 关于Map.Entry的分析
2.3 Map的常用方法分析
3.Set的分析
3.1关于Set分析
3.2 常见方法分析

1.搜刮

1.1 概念和场景

Map和Set是专门用于搜刮的容器或数据结构,它们的搜刮效率取决于具体的实例化子类。传统的搜刮方式包罗直接遍历和二分查找,但它们有一些限制。
1. 直接遍历:时间复杂度为O(N),当元素数量较多时效率较低。
2. 二分查找:时间复杂度为O(log N),但条件是序列必须是有序的。
这些方法更得当静态范例的查找,即在查找过程中不会举行插入和删除操作。然而,现实生存中的查找需求可能更加复杂,比方:
1. 根据姓名查询考试成绩
2. 不重复集合,必要先检查关键字是否已经存在于集合中
在这些情况下,直接遍历和二分查找可能不太适用,因为它们无法很好地处理动态查找的需求。所以,我们将先容一种得当动态查找的集合容器:Map和Set。
1.2 模子

在搜刮数据时,我们通常将必要查找的数据称为关键字(Key),而与之对应的数据称为值(Value)。这种键值对的结构被称为Key-value。根据实际需求,我们可以利用不同的模子来存储和处理这些键值对:


[*]纯 Key 模子:比方,当我们必要快速查找某个名字是否在某个班级中时,我们只必要知道名字这个关键字即可。在这种情况下,我们只必要存储关键字,而不必要存储与之对应的值


[*]Key-Value 模子:比方,当我们必要统计文件中每个单词出现的次数时,我们必要同时存储单词(关键字)和它们出现的次数(值)。在这种情况下,我们必要存储键值对,即每个单词及其对应的次数。
Map是一种用于存储键值对的数据结构,它答应我们通过关键字快速查找对应的值。Set则是一种只存储关键字的数据结构,它主要用于检查某个元素是否存在于集合中。
2.Map的利用

map官方文档
Map (Java Platform SE 8 ) (oracle.com)https://docs.oracle.com/javase/8/docs/api/java/util/Map.html
2.1 关于Map的分析

Map是一个接口类,该类没有继续Collection,Map类中存储是<K,V>结构的键值对,并且K一定是唯一的,不能重复。
2.2 关于Map.Entry的分析

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

方法表明V get(Object key)返回 key 对应的 valueV getOrDefault(Object key, V defaultValue)返回 key 对应的 value,key 不存在,返回默认值V put(K key, V value) 设置 key 对应的 value
V remove(Object key)删除 key 对应的映射关系Set<K> keySet()返回所有 key 的不重复集合Collection<V> values()返回所有 value 的可重复集合Set<Map.Entry<K, V>> entrySet()返回所有的 key-value 映射关系boolean containsKey(Object key)判断是否包罗 keyboolean containsValue(Object value)判断是否包罗 value 1. Map是一个接口,不能直接实例化对象,如果要实例化对象只能实例化实在现类TreeMap或者HashMap 
https://i-blog.csdnimg.cn/direct/66ff90ad56894369886ab11ae6b71faf.png​​

2. Map 中存储的是键值对(Key-Value),此中 Key 是唯一的,而 Value 可以重复。
3. 可以将 Map 中的所有 Key 提取出来,并存储到一个 Set 中举行访问(因为 Set 不答应重复元素)。
4. 可以将 Map 中的所有 Value 提取出来,并存储到任何 Collection 子类的集合中(Value 可能有重复)。
5. 在 Map 中,不能直接修改 Key,但可以修改 Value。如果要修改 Key,必须先删除原有的键值对,然后再重新插入新的键值对。
3.Set的分析

set官方文档
Set (Java Platform SE 8 )https://docs.oracle.com/javase/8/docs/api/java/util/Set.html
3.1关于Set分析

Set与Map主要的不同有两点:Set是继续自Collection的接口类,Set中只存储了Key。
3.2 常见方法分析

方法表明boolean add(E e)添加元素,但重复元素不会被添加成功void clear()清空集合boolean contains(Object o)判断 o 是否在集合中Iterator<E> iterator()返回迭代器boolean remove(Object o)删除集合中的 oint size()返回set中元素的个数boolean isEmpty()检测set是否为空,空返回true,否则返回falseObject[] 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. Set 的底层实现通常基于 Map,它利用 key 与一个固定的对象(如 Object 的默认实例)作为键值对存入 Map。
4. Set 的核心功能是去除重复的元素,确保每个元素只出现一次。
5. 由于 Set 中的 key 必须唯一,任何对 key 的修改都是不答应的。如果必要修改 key,只能先删除原有的 key,然后再重新插入新的 key。
6. Set 不答应插入 null 作为 key,以确保 key 的完备性和唯一性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Map&Set之相关概念