• Map集合


    一、Map集合:以键(key)-值(value)映射的形式,将数据保存到集合中,键和值保存的是对象的内存地址,键不允许重复,

              如果已经存在一个键-值,再插入相同的键,则会覆盖已存在的键的所对应值


     

    二、HashMap的数据结构

    1、HashMap集合底层是哈希(散列)表的数据结构

    2、哈希表是一个怎么样的数据结构呢?

          哈希表是一个数组和单链表的结合体

          数组:在查询方面效率很高,增加和删除方面效率很低

          单向链表:在随机增加删除方面效率更高

      


     

    三、map集合常用的方法:

    size() 判断map集合的长度,即键值对的个数,返回值为int型
    isEmpety() 判断该集合是否为空,返回值是Boolean类型
    clear() 清除map集合中的所有键值对
    containsKey(Object key) 判断map集合中是否有该键,返回值类型为Boolean
    containsValue(Object value) 判断map集合中是否有该值,返回值类型为Boolean
    get(Object key) 通过get方法,获取键key获取所对应的value值,返回值类型是value(值)的数据类型
    keySet() map集合中键是不允许重复的,set集合中元素也是不允许重复的,该方法获取map集合中的所有键,并存入Set集合中,Set集合的类型是键的数据类型
    entrySet() 该方法获取map集合中的所有键-值,并存入Set集合中:Set{key1=value1,...,keyn=valuen},Set集合的类型是键和值的数据类型:Set<Map.entry<key的数据类型,value的数据类型>>
    remove(object key) 从map集合中删除key所对应的键值对
    values() 获取map集合中所有的value(值),并放入Collection集合中,集合类型由value的数据类型决定
    put(key,value) 往map集合中放入键值对,其中key和value的数据类型,要和map集合定义时的键值类型要一致

    putall(Object map-b)

    将一个map-p复制到map集合中

    package daily;
    
    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) {
            HashMap<Integer,String> map1 = new HashMap<>();//定义HashMap集合,且HashMap的数据类型是包装类型,或者应用数据类型
            HashMap<Integer,String> map2 = new HashMap<>();
            map1.put(1,"亚索");
            map1.put(1,"快乐风男");//当键已经存在集合中,再插入重复的键时,值会进行覆盖,即快乐风男会覆盖亚索
            map1.put(2,"盲僧");
            map1.put(3,"石头人");
            map2.put(5,"火影劫");
            map2.put(6,"诡术妖姬");
            map2.put(7,"阿卡丽");
            System.out.println(map1.size());
            System.out.println(map1.isEmpty());
            System.out.println(map1.containsKey(1));
            System.out.println(map1.containsValue("快乐风男"));
            System.out.println(map1.get(2));
            System.out.println(map1.keySet());
            System.out.println(map1.values());
            System.out.println(map1.entrySet());
            System.out.println(map1.remove(1));//删除map1中,key为1所对应的键值对
            System.out.println(map1.entrySet());
            System.out.println(map1.put(4,"英雄联盟"));
            map1.putAll(map2);//将map2复制到map1中
            System.out.println(map1.entrySet());
        }
    }
    
    运行结果:
    3
    false
    true
    true
    盲僧
    [1, 2, 3]
    [快乐风男, 盲僧, 石头人]
    [1=快乐风男, 2=盲僧, 3=石头人]
    快乐风男
    [2=盲僧, 3=石头人]
    null
    [2=盲僧, 3=石头人, 4=英雄联盟, 5=火影劫, 6=诡术妖姬, 7=阿卡丽]

     


    四、Map集合的三种遍历方式:

    map集合是数组和链表的结合体,所以不能直接借助Iterator迭代器进行遍历,一般采用两种遍历方式:

    package daily;
    
    import java.util.*;
    
    public class maptest {
        public static void main(String[] args) {
            HashMap<Integer,String> map1 = new HashMap<>();//定义HashMap集合,且HashMap的数据类型是包装类型,或者应用数据类型
            map1.put(1,"亚索");
            map1.put(2,"快乐风男");
            map1.put(3,"盲僧");
            map1.put(4,"石头人");
            map1.put(5,"火影劫");
            map1.put(6,"诡术妖姬");
            map1.put(7,"阿卡丽");
            //方式一:直接通过keySet()方法获取map集合中所有的键,并放入到Set集合中,再通过迭代器Iterator或者foreach循坏进行遍历
           Set<Integer> s = map1.keySet();//set集合的类型和键的类型要一致
            //a.通过迭代器Iterator进行遍历
            Iterator<Integer> i= s.iterator();
            while(i.hasNext())
            {
                int j = i.next();
                String k=map1.get(j);//通过get()方法,利用键获取值
                System.out.println(j+"="+k);
            }
            System.out.println('
    ');
            //b.通过foreach循环进行遍历
            for(Integer S: s){
                String k = map1.get(S);
                System.out.println(S+"="+k);
            }
            System.out.println('
    ');
            //方式二:通过entrySet获取map集合中的所有键值对,并放入到Set集合中,Set集合的类型是Set<Map.Entry<键的数据类型,值得数据类型>>,
        再通过foreach循环遍历,这种方式的使用频率比较高,因为获取key-value都是直接从链表的节点对象获取的,适用于数据量比较大的key-value的时候
    Set<Map.Entry<Integer,String>> s1 = map1.entrySet(); for (Map.Entry<Integer,String> S:s1) { System.out.println(S); } } } 运行结果: 1=亚索 2=快乐风男 3=盲僧 4=石头人 5=火影劫 6=诡术妖姬 7=阿卡丽 1=亚索 2=快乐风男 3=盲僧 4=石头人 5=火影劫 6=诡术妖姬 7=阿卡丽 1=亚索 2=快乐风男 3=盲僧 4=石头人 5=火影劫 6=诡术妖姬 7=阿卡丽
  • 相关阅读:
    C#取枚举描述
    JSON数组操作
    .NET DES 加密
    MVC返回图片
    with check option
    HashSet<T>类
    Repository模式
    C#泛型集合之Dictionary<k, v>使用技巧
    权限管理——在线列表
    数据库锁
  • 原文地址:https://www.cnblogs.com/ibear/p/12905669.html
Copyright © 2020-2023  润新知