java-集合-Map(双列)——迪迦重制版(1)

Map中对应的key与value:

“大古” , “迪迦奥特曼”

“高山” , “盖亚奥特曼”

“李向阳” , “帝皇侠”

4、创建Map集合的对象:


多态的方式

具体的实现类HashMapHashTable、ConcurrentHashMap、TreeMap、LinkedHashMap、weakHashMap…(说些常用的)


5、所有方法:


    • | Modifier and Type | 方法 | 描述 |
    | --- | --- | --- |
    | `void` | `[clear]( )​()` | 
    从该地图中删除所有的映射(可选操作)。
     |
    | `default [V]( )` | `[compute]( )​([K]( ) key, [BiFunction]( )<? super [K]( ),? super [V]( ),? extends [V]( )> remappingFunction)` | 
    尝试计算指定键的映射及其当前映射值(如果没有当前映射,则 `null` )。
     |
    | `default [V]( )` | `[computeIfAbsent]( )​([K]( ) key, [Function]( )<? super [K]( ),? extends [V]( )> mappingFunction)` | 
    如果指定的键尚未与值相关联(或映射到 `null` ),则尝试使用给定的映射函数计算其值,并将其输入到此映射中,除非是 `null` 。
     |
    | `default [V]( )` | `[computeIfPresent]( )​([K]( ) key, [BiFunction]( )<? super [K]( ),? super [V]( ),? extends [V]( )> remappingFunction)` | 
    如果指定的密钥的值存在且非空,则尝试计算给定密钥及其当前映射值的新映射。
     |
    | `boolean` | `[containsKey]( )​([Object]( ) key)` | 
    如果此映射包含指定键的映射,则返回 `true` 。
     |
    | `boolean` | `[containsValue]( )​([Object]( ) value)` | 
    如果此映射将一个或多个键映射到指定的值,则返回 `true` 。
     |
    | `static <K,V> [Map.Entry]( )<K,V>` | `[entry]( )​(K k, V v)` | 
    返回包含给定键和值的不可变[Map.Entry]( ) 。
     |
    | `[Set]( )<[Map.Entry]( )<[K]( ),[V]( )>>` | `[entrySet]( )​()` | 
    返回此地图中包含的映射的[Set]( )视图。
     |
    | `boolean` | `[equals]( )​([Object]( ) o)` | 
    将指定的对象与此映射进行比较以获得相等性。
     |
    | `default void` | `[forEach]( )​([BiConsumer]( )<? super [K]( ),? super [V]( )> action)` | 
    对此映射中的每个条目执行给定的操作,直到所有条目都被处理或操作引发异常。
     |
    | `[V]( )` | `[get]( )​([Object]( ) key)` | 
    返回指定键映射到的值,如果此映射不包含该键的映射,则返回 `null` 。
     |
    | `default [V]( )` | `[getOrDefault]( )​([Object]( ) key, [V]( ) defaultValue)` | 
    返回指定键映射到的值,如果此映射不包含该键的映射,则返回 `defaultValue` 。
     |
    | `int` | `[hashCode]( )​()` | 
    返回此地图的哈希码值。
     |
    | `boolean` | `[isEmpty]( )​()` | 
    如果此映射不包含键值映射,则返回 `true` 。
     |
    | `[Set]( )<[K]( )>` | `[keySet]( )​()` | 
    返回此地图中包含的键的[Set]( )视图。
     |
    | `default [V]( )` | `[merge]( )​([K]( ) key, [V]( ) value, [BiFunction]( )<? super [V]( ),? super [V]( ),? extends [V]( )> remappingFunction)` | 
    如果指定的键尚未与值相关联或与null相关联,则将其与给定的非空值相关联。
     |
    | `static <K,V> [Map]( )<K,V>` | `[of]( )​()` | 
    返回一个包含零映射的不可变地图。
     |
    | `static <K,V> [Map]( )<K,V>` | `[of]( )​(K k1, V v1)` | 
    返回包含单个映射的不可变地图。
     |
    | `static <K,V> [Map]( )<K,V>` | `[of]( )​(K k1, V v1, K k2, V v2)` | 
    返回包含两个映射的不可变地图。
     |
    | `static <K,V> [Map]( )<K,V>` | `[of]( )​(K k1, V v1, K k2, V v2, K k3, V v3)` | 
    返回包含三个映射的不可变地图。
     |
    | `static <K,V> [Map]( )<K,V>` | `[of]( )​(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4)` | 
    返回包含四个映射的不可变地图。
     |
    | `static <K,V> [Map]( )<K,V>` | `[of]( )​(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5)` | 
    返回一个包含五个映射的不可变地图。
     |
    | `static <K,V> [Map]( )<K,V>` | `[of]( )​(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6)` | 
    返回包含六个映射的不可变地图。
     |
    | `static <K,V> [Map]( )<K,V>` | `[of]( )​(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7)` | 
    返回包含七个映射的不可变地图。
     |
    | `static <K,V> [Map]( )<K,V>` | `[of]( )​(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8)` | 
    返回包含八个映射的不可变地图。
     |
    | `static <K,V> [Map]( )<K,V>` | `[of]( )​(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9)` | 
    返回包含九个映射的不可变地图。
     |
    | `static <K,V> [Map]( )<K,V>` | `[of]( )​(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10)` | 
    返回包含十个映射的不可变地图。
     |
    | `static <K,V> [Map]( )<K,V>` | `[ofEntries]( )​([Map.Entry]( )<? extends K,? extends V>... entries)` | 
    返回包含从给定条目提取的键和值的不可变地图。
     |
    | `[V]( )` | `[put]( )​([K]( ) key, [V]( ) value)` | 
    将指定的值与该映射中的指定键相关联(可选操作)。
     |
    | `void` | `[putAll]( )​([Map]( )<? extends [K]( ),? extends [V]( )> m)` | 
    将指定地图的所有映射复制到此映射(可选操作)。
     |
    | `default [V]( )` | `[putIfAbsent]( )​([K]( ) key, [V]( ) value)` | 
    如果指定的键尚未与值相关联(或映射到 `null` )将其与给定值相关联并返回 `null` ,否则返回当前值。
     |
    | `[V]( )` | `[remove]( )​([Object]( ) key)` | 
    如果存在(从可选的操作),从该地图中删除一个键的映射。
     |
    | `default boolean` | `[remove]( )​([Object]( ) key, [Object]( ) value)` | 
    仅当指定的密钥当前映射到指定的值时删除该条目。
     |
    | `default [V]( )` | `[replace]( )​([K]( ) key, [V]( ) value)` | 
    只有当目标映射到某个值时,才能替换指定键的条目。
     |
    | `default boolean` | `[replace]( )​([K]( ) key, [V]( ) oldValue, [V]( ) newValue)` | 
    仅当当前映射到指定的值时,才能替换指定键的条目。
     |
    | `default void` | `[replaceAll]( )​([BiFunction]( )<? super [K]( ),? super [V]( ),? extends [V]( )> function)` | 
    将每个条目的值替换为对该条目调用给定函数的结果,直到所有条目都被处理或该函数抛出异常。
     |
    | `int` | `[size]( )​()` | 
    返回此地图中键值映射的数量。
     |
    | `[Collection]( )<[V]( )>` | `[values]( )​()` | 
    返回此地图中包含的值的[Collection]( )视图。
     |

6、Map注意事项:


  • Map接口提供了三个_集合视图_ ,允许将映射的内容视为一组键,值的集合或键值映射集合。 地图的_顺序_被定义为其中在地图上的集合视图迭代返回元素的顺序。 一些地图实现,如TreeMap类,对其顺序做出特定的保证; 其他人,像HashMap类,不要。
注意:如果使用可变对象作为地图键,必须非常小心。 如果对象的值以影响`equals`比较的方式更改,而对象是地图中的键,则不会指定映射的行为。 这个禁令的一个特殊情况是,地图不允许将自己包含在内。 虽然地图可以将其本身作为一个值,但建议您非常小心: `equals`和`hashCode`方法在这样的地图上已经不太明确。
所有通用映射实现类应提供两个“标准”构造函数:一个创建空映射的void(无参数)构造函数和一个具有类型为`Map`的单个参数的构造函数,它创建一个具有相同键值的新映射映射作为参数。 实际上,后一个构造函数允许用户复制任何地图,产生所需类的等效地图。 没有办法强制执行此建议(因为接口不能包含构造函数),而JDK中的所有通用映射实现都符合要求。
如果此映射不支持此操作,则此接口中包含的“破坏性”方法(即修改其操作的映射的方法)将被指定为抛出`UnsupportedOperationException` 。 如果是这种情况,如果调用对地图没有影响,这些方法可能可以但不是必须抛出`UnsupportedOperationException` 。 例如,在不可修改的地图上调用[putAll(Map)]( )")方法可能会将其映射为“叠加”的地图空白时,但不是必须抛出异常。
一些地图实现对它们可能包含的键和值有限制。 例如,一些实现禁止空键和值,有些对键的类型有限制。 尝试插入不合格的键或值会引发未经检查的异常,通常为`NullPointerException`或`ClassCastException` 。 尝试查询不合格键或值的存在可能会引发异常,或者可能只是返回false; 一些实现将展现出前者的行为,一些实现将展现出后者。 更一般来说,尝试对不符合条件的密钥或值的操作,其完成不会导致将不合格元素插入到地图中可能会导致异常或可能成功执行该选项。 此异常在此接口的规范中标记为“可选”。
Collections Framework接口中的许多方法都是按照[equals]( )方法进行定义的。 例如, [containsKey(Object key)]( )")方法的规范说:“当且仅当此映射包含`k`的映射关系`true`时才返回`(key==null ? k==null : key.equals(k))` 。 该规范_不_应该被解释为意味着调用`Map.containsKey`与非空参数`key`会导致`key.equals(k)`被调用的任意键`k` 。 实现可以自由地实现优化,从而避免`equals`调用,例如,首先比较两个密钥的哈希码。 ( [Object.hashCode()]( )")规范保证具有不等的哈希码的两个对象不能相等。)更一般地,各种Collections Framework接口的实现可以随意利用底层的[Object]( )方法的指定行为,无论执行者认为合适。
执行递归遍历地图的一些地图操作可能会失败,并且地图直接或间接包含自身的自引用实例有异常。 这包括`clone()` , `equals()` , `hashCode()`和`toString()`方法。 实现可以可选地处理自引用场景,然而大多数当前实现不这样做。

二、HashMap(让我们来具体看看这Map星云把我迦迷得不要不要的小妖精)

======================================

1、盖亚!!!(无不无聊…)…概述:


“不好意思…我不无聊!!”

  • HashMap是基于哈希表的实现的Map接口。 该实现提供了所有可选的映射操作,并允许null值和null密钥。 ( HashMap类大致相当于Hashtable ,除了它是不同步的,并允许null)。这个类不能保证地图的顺序; 特别是,它不能保证订单在一段时间内保持不变。

HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。

HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。

HashMap 是无序的,即不会记录插入的顺序。

HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。

“只要我足够强,谁来都没用!Map星云都是我的。”

“来啊,造作啊,来哇,快活啊。”

2、可惜,我迦不是我迪啊,呵呵,大威天龙!!!(看法宝):


    • | Modifier and Type | 方法 | 描述 |
    | --- | --- | --- |
    | `void` | `[clear]( )​()` | 
    从这张地图中删除所有的映射。
     |
    | `[Object]( )` | `[clone]( )​()` | 
    返回此 `HashMap`实例的浅拷贝:键和值本身不被克隆。
     |
    | `[V]( )` | `[compute]( )​([K]( ) key, [BiFunction]( )<? super [K]( ),? super [V]( ),? extends [V]( )> remappingFunction)` | 
    尝试计算指定密钥及其当前映射值的映射(如果没有当前映射,则 `null` )。
     |
    | `[V]( )` | `[computeIfAbsent]( )​([K]( ) key, [Function]( )<? super [K]( ),? extends [V]( )> mappingFunction)` | 
    如果指定的键尚未与值相关联(或映射到 `null` ),则尝试使用给定的映射函数计算其值,并将其输入到此映射中,除非 `null` 。
     |
    | `[V]( )` | `[computeIfPresent]( )​([K]( ) key, [BiFunction]( )<? super [K]( ),? super [V]( ),? extends [V]( )> remappingFunction)` | 
    如果指定的密钥的值存在且非空,则尝试计算给定密钥及其当前映射值的新映射。
     |
    | `boolean` | `[containsKey]( )​([Object]( ) key)` | 
    如果此映射包含指定键的映射,则返回 `true` 。
     |
    | `boolean` | `[containsValue]( )​([Object]( ) value)` | 
    如果此映射将一个或多个键映射到指定的值,则返回 `true` 。
     |
    | `[Set]( )<[Map.Entry]( )<[K]( ),[V]( )>>` | `[entrySet]( )​()` | 
    返回此地图中包含的映射的[Set]( )视图。
     |
    | `void` | `[forEach]( )​([BiConsumer]( )<? super [K]( ),? super [V]( )> action)` | 
    对此映射中的每个条目执行给定的操作,直到所有条目都被处理或操作引发异常。
     |
    | `[V]( )` | `[get]( )​([Object]( ) key)` | 
    返回指定键映射到的值,如果此映射不包含键的映射,则返回 `null` 。
     |
    | `[V]( )` | `[getOrDefault]( )​([Object]( ) key, [V]( ) defaultValue)` | 
    返回指定键映射到的值,如果此映射不包含该键的映射,则返回 `defaultValue` 。
     |
    | `boolean` | `[isEmpty]( )​()` | 
    如果此映射不包含键值映射,则返回 `true` 。
     |
    | `[Set]( )<[K]( )>` | `[keySet]( )​()` | 
    返回此地图中包含的键的[Set]( )视图。
     |
    | `[V]( )` | `[merge]( )​([K]( ) key, [V]( ) value, [BiFunction]( )<? super [V]( ),? super [V]( ),? extends [V]( )> remappingFunction)` | 
    如果指定的键尚未与值相关联或与null相关联,则将其与给定的非空值相关联。
     |
    | `[V]( )` | `[put]( )​([K]( ) key, [V]( ) value)` | 
    将指定的值与此映射中的指定键相关联。
     |
    | `void` | `[putAll]( )​([Map]( )<? extends [K]( ),? extends [V]( )> m)` | 
    将指定地图的所有映射复制到此地图。
     |
    | `[V]( )` | `[putIfAbsent]( )​([K]( ) key, [V]( ) value)` | 
    如果指定的键尚未与值相关联(或映射到 `null` )将其与给定值相关联并返回 `null` ,否则返回当前值。
     |
    | `[V]( )` | `[remove]( )​([Object]( ) key)` | 
    从该地图中删除指定键的映射(如果存在)。
     |
    | `boolean` | `[remove]( )​([Object]( ) key, [Object]( ) value)` | 
    仅当指定的密钥当前映射到指定的值时删除该条目。
     |
    | `[V]( )` | `[replace]( )​([K]( ) key, [V]( ) value)` | 
    只有当目标映射到某个值时,才能替换指定键的条目。
     |
    | `boolean` | `[replace]( )​([K]( ) key, [V]( ) oldValue, [V]( ) newValue)` | 
    仅当当前映射到指定的值时,才能替换指定键的条目。
     |
    | `void` | `[replaceAll]( )​([BiFunction]( )<? super [K]( ),? super [V]( ),? extends [V]( )> function)` | 
    将每个条目的值替换为对该条目调用给定函数的结果,直到所有条目都被处理或该函数抛出异常。
     |
    | `int` | `[size]( )​()` | 
    返回此地图中键值映射的数量。
     |
    | `[Collection]( )<[V]( )>` | `[values]( )​()` | 
    返回此地图中包含的值的[Collection]( )视图。
     |

3、只是终究还是错付了,我迪还是受不鸟辣么的诱惑,实在是给得太多了。所以,注意了,这些事情早知道,早…快乐!(注意注意):


HashMap的键和值的类型可以是String类型,也可以是其他数据的包装类类型

Map集合的元素的添加并不是Collection集合的add()方法,而是Put()方法。

Map的遍历也不再是for循环或是while循环去integer迭代什么了,而是用到两种新的遍历方式,通过keySet或是entrySet的方法。

只是终究,噩梦都会到来,再美好的一切,都会失去,哭也没用了:

4、方法代码实例,让我们呼唤光吧,净化那丑陋的一切:


 

让我们来整一个全局观,测试测试这些方法。

定义一个Map接口类型的变量,引用一个实现类,添加键值对,

判断集合中是否包含某一key值,通过某一key值得到value值,

通过某一key删除键值对,

把另一个map集合添加到此map集合,

判断是否为空,

清除集合,

返回集合里元素的个数等常用操作(返回一个长度的问题,就自己想办法吧,给我数(三声)!)。

通过两种方法遍历上题中的map集合。

(代码如下)

package MapDemo;

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

public class Map001 {

public static void main(String[] args) {

//创建Map集合

Map<String,String> map=new HashMap<String, String>();

//存入数据,put方法

map.put(“LAOZI”,“《道德经》”);

map.put(“KONGZI”,“《论语》”);

map.put(“ZHUANGZI”,“《南华经》”);

map.put(“GEHONG”,“《抱朴子》”);

//根据键key,找值value

String s = map.get(“LAOZI”);

System.out.println(s);

System.out.println(“--------------”);

//根据键key,删除值value

String s1 = map.remove(“GEHONG”);

System.out.println(s1);

System.out.println(“--------------”);

Map<String,String> map1=new HashMap<>();

map1.put(“wuming”,“万剑归宗”);

//全局存入,一个双列集合,存入另一个双列集合

map.putAll(map1);

//判断集合是否为空

boolean empty = map.isEmpty();

System.out.println(empty);

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
);

//根据键key,删除值value

String s1 = map.remove(“GEHONG”);

System.out.println(s1);

System.out.println(“--------------”);

Map<String,String> map1=new HashMap<>();

map1.put(“wuming”,“万剑归宗”);

//全局存入,一个双列集合,存入另一个双列集合

map.putAll(map1);

//判断集合是否为空

boolean empty = map.isEmpty();

System.out.println(empty);

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-AspcxR1A-1715709486896)]

[外链图片转存中…(img-pIZsuXad-1715709486897)]

[外链图片转存中…(img-KW8naTNV-1715709486897)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值