目录

引言

一:Map星云,集合(概要!!!,,,哦,不是,喊错了,盖亚!!!)

1、盖亚?(概要):

2、技能(特点):

3、举例:

4、创建Map集合的对象:

5、所有方法:

6、Map注意事项:

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

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

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

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

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

三、人间体大古,为了人界和平,再次使命召来,让我们高举代码,呼唤,光!!(案例怪兽来了)

四、我们要永远相信光,当黑暗来临,那个人,总会出现在你身旁!


引言

神说,“要有光...”

大古,“迪迦!!!”

bang的一拳锤在了神的脸上,“就是你天天喊?不知道我很忙吗,刚被绑架才被放出来,看着你们这些人就很不爽。装神弄鬼...”

拍了拍身上,虽然也没什么灰。

“要光去Map...嗯,是Map吧?去Map星云找去。闲的......”(谁也不知道我重复了三遍吧?)

说完,转过身纵身一跃,

“嚓~~”的一声,化为一道流光飞走了。

----------------------

众所周知,奥特曼分为人间体与变身后的奥特曼之体。所以,今天我们来详细说说,这Map星云的万千异象。

一:Map星云,集合(概要!!!,,,哦,不是,喊错了,盖亚!!!)

不要意思,盖亚今天不上班,都是我!

1、盖亚?(概要):

Interface Map<K,V>    K:键的类型;V:值的类型。

2、技能(特点):

将键映射到值的对象;

不能包含重复的键;

每个键可以映射到最多一个值。

3、举例:

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比较的方式更改,而对象是地图中的键,则不会指定映射的行为。 这个禁令的一个特殊情况是,地图不允许将自己包含在内。 虽然地图可以将其本身作为一个值,但建议您非常小心: equalshashCode方法在这样的地图上已经不太明确。

    所有通用映射实现类应提供两个“标准”构造函数:一个创建空映射的void(无参数)构造函数和一个具有类型为Map的单个参数的构造函数,它创建一个具有相同键值的新映射映射作为参数。 实际上,后一个构造函数允许用户复制任何地图,产生所需类的等效地图。 没有办法强制执行此建议(因为接口不能包含构造函数),而JDK中的所有通用映射实现都符合要求。

    如果此映射不支持此操作,则此接口中包含的“破坏性”方法(即修改其操作的映射的方法)将被指定为抛出UnsupportedOperationException 。 如果是这种情况,如果调用对地图没有影响,这些方法可能可以但不是必须抛出UnsupportedOperationException 。 例如,在不可修改的地图上调用putAll(Map)方法可能会将其映射为“叠加”的地图空白时,但不是必须抛出异常。

    一些地图实现对它们可能包含的键和值有限制。 例如,一些实现禁止空键和值,有些对键的类型有限制。 尝试插入不合格的键或值会引发未经检查的异常,通常为NullPointerExceptionClassCastException 。 尝试查询不合格键或值的存在可能会引发异常,或者可能只是返回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,找值valueString s = map.get("LAOZI");System.out.println(s);System.out.println("--------------");//根据键key,删除值valueString 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);System.out.println("-------------");//遍历方法之entrySetSet<Map.Entry<String, String>> entrySet = map.entrySet();for (Map.Entry<String, String> me:entrySet){String key= me.getKey();String value=me.getValue();System.out.println(key+","+value);}System.out.println("------------");//清盘,清空集合中数据map.clear();//遍历方法之keySetSet<String> keySet = map.keySet();for (String key:keySet){String value=map.get(key);System.out.println(key+","+value);}}
}

三、人间体大古,为了人界和平,再次使命召来,让我们高举代码,呼唤,光!!(案例怪兽来了)

模拟斗地主洗牌发牌。

分析:

首先应准备牌:完成数字与纸牌的映射关系:使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系。

洗牌:通过数字完成洗牌发牌(借助工具类)

发牌:将每个人以及底牌设计,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌给3个玩家。存放的过程中要求数字大小与斗地主规则的大小对应排序。将代表不同纸牌的数字分配给不同的玩家与底牌。

看牌:通过Map集合找到对应字符展示。通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。

“地噶!!!”

“以雷霆击碎黑暗!”

package MapDemo;import java.util.*;public class Map03 {public static void main(String[] args) {//Map集合HashMap<Integer, String> map = new HashMap<Integer, String>();//创建Arraylist集合存储编号ArrayList<Integer> list = new ArrayList<Integer>();//创建花色与点数数组String[] colors = {"♠", "♥", "♦", "♣"};String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};//从0开始往map里面存编号与牌,同时往list集合里面存编号。int index = 0;//循环嵌套内外层很重要,如果外层是颜色,存储的时候就是花色+3456...,如果外层是数值,存储时就是33334444...for (String number : numbers) {for (String color : colors){map.put(index, color + number);list.add(index);index++;}}//存大小王map.put(index, "小王");list.add(index);index++;map.put(index, "大王");list.add(index);//洗牌Collections.shuffle(list);//收牌的人(集合),发编号(顺序)TreeSet<Integer> zgrSet = new TreeSet<Integer>();TreeSet<Integer> myfSet = new TreeSet<Integer>();TreeSet<Integer> ljlSet = new TreeSet<Integer>();TreeSet<Integer> dpSet = new TreeSet<Integer>();//发牌到三个玩家手上for (int i = 0; i < list.size(); i++) {int x = list.get(i);if (i >= list.size() - 3) {dpSet.add(x);} else if (i % 3 == 0) {zgrSet.add(x);} else if (i % 3 == 1) {myfSet.add(x);} else if (i % 3 == 2) {ljlSet.add(x);}}//调用看牌方法lookPoker("张国荣", zgrSet, map);lookPoker("梅艳芳", myfSet, map);lookPoker("刘嘉玲", ljlSet, map);lookPoker("底牌", dpSet, map);}//定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合中找到对应的牌)public static void lookPoker(String name, TreeSet<Integer> treeSet, HashMap<Integer, String> map) {System.out.println(name + "的牌是: ");for (Integer key : treeSet) {String poker = map.get(key);System.out.print(poker + " ");}System.out.println();}
}

四、我们要永远相信光,当黑暗来临,那个人,总会出现在你身旁!

暴风雨后,总是彩虹。我们相信,身边每个人都会是一道光,照亮着你,温暖着你,做一个有理想有道德有纪律有文化的种花家之人。

“凡是过往,皆为序章。”

——莎士比亚《暴风雨》

未来如何,且行且看。

ending!

java-集合-Map(双列)——迪迦重制版相关推荐

  1. java-集合-Map(双列)——迪迦重制版,2021Java开发社招面试解答之性能优化

    3.举例: 4.创建Map集合的对象: 5.所有方法: 6.Map注意事项: 二.HashMap(让我们来具体看看这Map星云把我迦迷得不要不要的小妖精) 1.盖亚!!!(无不无聊-)-概述: 2.可 ...

  2. java 中遍历双列集合_获取单列集合,双列集合,数组的Stream流对象以及简单操作...

    获取流对象 获取单列集合,双列集合,数组的流对象 单列集合获取流对象: 1.java.util.Collection接口中加入了default方法stream()获取流对象,因此其所有实现类均可通过此 ...

  3. Java——集合(Map集合的两种迭代)

    一,Map集合的第一种迭代 Map集合的第一种迭代,通过get(key)方法,根据键去获取值 package com.wsq.map;import java.util.HashMap; import ...

  4. java集合 — — Map集合

    十.Map集合 10.1.概述 现实生活中,常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一对应的关系,就叫做映射.Java提供了专门的集台类用来存放这种对 ...

  5. Java集合Map,set, list 之间的转换

    Java集合Map,set, list 之间的转换 前言: 通过思维导图复习联系,看到一个HashMap排序题上机题之后有的一个感想,题目如下,看看你能时间出来么? 已知一个HashMap<In ...

  6. 【Java】如何理解Java中的双列集合Map?

    1 Map<K,V>接口 1.1 特点 双列集合一个元素包含俩值 Key不可以重复,Value可以重复 Key和Value一一对应 Key和Value可以时任意类型 1.2 常用方法 pu ...

  7. Map双列集合的用法,遍历方法

    Map集合的常用方法. Map集合是一个双列集合,里面的每个元素都是一个键值对. Map<K,V> 有两个泛型, K 表示Map集合中键的类型. V 表示Map集合中值的数据类型. 常用方 ...

  8. 终于,我读懂了所有Java集合——map篇

    首先,红黑树细节暂时撸不出来,所以没写,承诺年前一定写 HashMap (底层是数组+链表/红黑树,无序键值对集合,非线程安全) 基于哈希表实现,链地址法. loadFactor默认为0.75,thr ...

  9. Java集合——Map接口学习总结

    一.HashMap实现类 1.常用方法 增加:put(K key, V value)删除:clear() remove(Object key)修改:查看:entrySet() get(Object k ...

最新文章

  1. zabbix mysql 8g优化_Zabbix分区优化
  2. std::list 修改某个值_在WordPress首页不显示某个分类文章的做法
  3. (转载)SpringBoot 发送邮件和附件
  4. JVM学习记录-类加载的过程
  5. Redis 如何分析慢查询操作
  6. ISAKMP包数据属性格式
  7. sqlite3 判断数据库和表的状态
  8. 2019年7月Github上最热门的Java开源项目
  9. Ubuntu 9.04安装永中Office 2009
  10. esp8266作为wifi中继固件 无线信号延展
  11. NCIE(国家网络工程师认证)
  12. 实践小笔记(1) --- DBSCAN
  13. 油管youtube第三方客户端 去广告-TubeMax
  14. 面试题64:computer和watch的区别
  15. 拖拉机大战更新了,更多新功能
  16. 东南大学计算机科学沈桥,走进东南大学,金中学子要做“未来卓越工程师”!...
  17. 初学Java简易自助饮品消费系统项目实践
  18. Disturbed People CodeForces - 1077B
  19. 疫情之下,征信有逾期如何处理?
  20. pad 锁定屏幕显示方向为竖屏正方向

热门文章

  1. Xen network Linux
  2. Handwiki:Wiki Encyclopedia of Knowledge
  3. 今天是个比较特殊的日子——再次受到创伤
  4. Nodejs笔记之易错点整理
  5. Chatgpt-3 使用的提取数据集技术、数据集自动化处理和保证数据质量
  6. 没有归属感?辛苦如牛?软件测试外包那些事,你真的了解吗?
  7. 为什么核电站的核反应堆原料一定要用铀?
  8. 行内块元素的间隙解决办法
  9. 性能测试用例的 编写
  10. 内外边界 区分 与 例子