|NO.Z.00061|——————————|BigDataEnd|——|Java&集合类库.V09|——|Java.v08|Map集合|

一、Map集合
### --- Map集合

~~~     [Map集合的概念]——[元素放入HashMap集合的过程]——[Map集合实现元素的查找和删除操作]
~~~     [Map集合的三种遍历方式]
### --- 基本概念

——>        java.util.Map<K,V>集合中存取元素的基本单位是:单对元素,其中类型参数如下:
——>            K - 此映射所维护的键(Key)的类型,相当于目录。
——>            V - 映射值(Value)的类型,相当于内容。
——>       该集合中key是不允许重复的,而且一个key只能对应一个value。
~~~     # 该集合的主要实现类有:

——>        HashMap类、TreeMap类、LinkedHashMap类、Hashtable类、Properties类。
——>        其中HashMap类的底层是采用哈希表进行数据管理的。
——>        其中TreeMap类的底层是采用红黑树进行数据管理的。
——>        其中LinkedHashMap类与HashMap类的不同之处在于内部维护了一个双向链表,
——>        链表中记录了元素的迭代顺序,也就是元素插入集合中的先后顺序,因此便于迭代。
——>        其中Hashtable类是古老的Map实现类,与HashMap类相比属于线程安全的类,
——>        且不允许null作为key或者value的数值。
——>        其中Properties类是Hashtable类的子类,该对象用于处理属性文件,
——>        key和value都是String类型的。
——>        Map集合是面向查询优化的数据结构, 在大数据量情况下有着优良的查询性能。
——>        经常用于根据key检索value的业务场景。
二、常用的方法
方法声明 功能介绍
V put(K key, V value) 将Key-Value对存入Map,若集合中已经包含该Key,
则替换该Key所对应的Value,
返回值为该Key原来所对应的Value,若没有则返回null
V get(Object key) 返回与参数Key所对应的Value对象,如果不存在则返回null
booleancontainsKey(Objectkey); 判断集合中是否包含指定的Key
booleancontainsValue(Object value); 判断集合中是否包含指定的Value
V remove(Object key) 根据参数指定的key进行删除
Set keySet() 返回此映射中包含的键的Set视图
Collection values()  返回此映射中包含的值的Set视图
Set<Map.Entry<K,V>>entrySet() 返回此映射中包含的映射的Set视图
三、元素放入HashMap集合的原理
### --- 元素放入HashMap集合的原理

——>        使用元素的key调用hashCode方法获取对应的哈希码值,
——>        再由某种哈希算法计算在数组中的索引位置。
——>        若该位置没有元素,则将该键值对直接放入即可。
——>        若该位置有元素,则使用key与已有元素依次比较哈希值,若哈希值不相同,
——>        则将该元素直接放入。
——>        若key与已有元素的哈希值相同,则使用key调用equals方法与已有元素依次比较。
——>        若相等则将对应的value修改,否则将键值对直接放入即可。
四、相关的常量
### --- 相关的常量

——>        DEFAULT_INITIAL_CAPACITY : HashMap的默认容量是16。
——>        DEFAULT_LOAD_FACTOR:HashMap的默认加载因子是0.75。
——>        threshold:扩容的临界值,该数值为:容量*填充因子,也就是12。
——>        TREEIFY_THRESHOLD:若Bucket中链表长度大于该默认值则转化为红黑树存储,
——>        该数值是8。
——>        MIN_TREEIFY_CAPACITY:桶中的Node被树化时最小的hash表容量,该数值是64。
五、set集合转换为map的原理
六、编程代码
package com.yanqi.task15;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapTest {

    public static void main(String[] args) {

        // 1.准备一个Map集合并打印
        Map<String, String> m1 = new HashMap<>();
        // 自动调用toString方法,默认打印格式为:{key1=value1, key2=value2, ...}
        System.out.println("m1 = " + m1); // {啥也没有}

        // 2.向集合中添加元素并打印
        String str1 = m1.put("1", "one");
        System.out.println("原来的value数值为:" + str1); // null
        System.out.println("m1 = " + m1); // {1=one}

        str1 = m1.put("2", "two");
        System.out.println("原来的value数值为:" + str1); // null
        System.out.println("m1 = " + m1); // {1=one, 2=two}

        str1 = m1.put("3", "three");
        System.out.println("原来的value数值为:" + str1); // null
        System.out.println("m1 = " + m1); // {1=one, 2=two, 3=three}
        // 实现了修改的功能
        str1 = m1.put("1", "eleven");
        System.out.println("原来的value数值为:" + str1); // one
        System.out.println("m1 = " + m1); // {1=eleven, 2=two, 3=three}

        System.out.println("-------------------------------------------------------------");
        // 3.实现集合中元素的查找操作
        boolean b1 = m1.containsKey("11");
        System.out.println("b1 = " + b1); // false
        b1 = m1.containsKey("1");
        System.out.println("b1 = " + b1); // true

        b1 = m1.containsValue("one");
        System.out.println("b1 = " + b1); // false
        b1 = m1.containsValue("eleven");
        System.out.println("b1 = " + b1); // true

        String str2 = m1.get("5");
        System.out.println("str2 = " + str2); // null
        str2 = m1.get("3");
        System.out.println("str2 = " + str2); // three

        System.out.println("-------------------------------------------------------------");
        // 4.实现集合中元素的删除操作
        str2 = m1.remove("1");
        System.out.println("被删除的value是:" + str2); // eleven
        System.out.println("m1 = " + m1); // {2=two, 3=three}

        System.out.println("-------------------------------------------------------------");
        // 5.获取Map集合中所有的key并组成Set视图
        Set<String> s1 = m1.keySet();
        // 遍历所有的key
        for (String ts : s1) {
            System.out.println(ts + "=" + m1.get(ts));
        }

        System.out.println("-------------------------------------------------------------");
        // 6.获取Map集合中所有的Value并组成Collection视图
        Collection<String> co = m1.values();
        for (String ts : co) {
            System.out.println("ts = " + ts);
        }

        System.out.println("-------------------------------------------------------------");
        // 7.获取Map集合中所有的键值对并组成Set视图
        Set<Map.Entry<String, String>> entries = m1.entrySet();
        for (Map.Entry<String, String> me : entries) {
            System.out.println(me);
        }
    }
}
七、编译打印
D:\JAVA\jdk-11.0.2\bin\java.exe "-javaagent:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=65138:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath E:\NO.Z.10000——javaproject\NO.H.00001.javase\javase\out\production\javase com.yanqi.task15.MapTest
m1 = {}
原来的value数值为:null
m1 = {1=one}
原来的value数值为:null
m1 = {1=one, 2=two}
原来的value数值为:null
m1 = {1=one, 2=two, 3=three}
原来的value数值为:one
m1 = {1=eleven, 2=two, 3=three}
-------------------------------------------------------------
b1 = false
b1 = true
b1 = false
b1 = true
str2 = null
str2 = three
-------------------------------------------------------------
被删除的value是:eleven
m1 = {2=two, 3=three}
-------------------------------------------------------------
2=two
3=three
-------------------------------------------------------------
ts = two
ts = three
-------------------------------------------------------------
2=two
3=three

Process finished with exit code 0

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

posted on   yanqi_vip  阅读(23)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示