zoukankan      html  css  js  c++  java
  • 56. Map(双列集合)

    在生活中有些数据是以映射关系存在的,也就是成对出现的,比如:老公  老婆(key-->value)

    双列集合:
    -------------------| Map    如果是实现了Map接口的集合类,集合类具备的特点是:存储的数据是以键值对存在的,键不可重复,值可重复
    -------------| HashMap    底层是基于哈希表实现的
    HashMap的实现原理:
        往HashMap添加元素的时候,HashMap会自动先调用元素的hashCode方法得到元素的哈希表,
        然后通过元素的哈希值经过移位等运算,就可以算出该元素在哈希表中的存储位置
        
        情况一:如果算出元素的存储位置目前还没有元素,那么该元素可以直接存储到该位置
        
        情况二:如果算出元素的存储位置已经存在其他元素,那么会自动调用equals方法再进行比较一次
        如果equals返回ture那么就视为重复元素,不可添加,如果返回false,那么就可以添加

    -------------| TreeMap    底层是基于红黑树实现的(二叉数),特点:会跟元素排序(key值,而不是value值排序)
    TreeMap注意事项:
        1.TreeMap在添加元素的时候,如果数据有自然排序规则,那么就按照元素的自然顺序的特性进行排序存储
        2.TreeMap在添加元素的时候,如果数据不具备自然排序规则,那么该元素所属类必须实现Comparable接口,把元素的比较规则写在compareTo方法上
        3.TreeMap在添加元素的时候,如果元素本身不具备自然数据特性,而元素也没有实现Comparable接口,那么必须要在创建ThreeSet的时候传入一个比较器
        4.如果比较元素的时候调用compareTo返回的是0,那么该元素就被视为重复元素,不可添加(注意:跟hashcode和equals无关)


    -------------| Hashtable(了解) 底层也是维护了一个哈希表,不过它的线程安全,但效率低

    Map<K,V>的常用方法:

        添加:
            put(K key, V value)     
                添加的时候,如果不存在添加的key值,那么添加成功后返回null
                如果存在添加的key值,那么会替换原先的value值,并返回原来的value
                
             putAll(Map<? extends K,? extends V> m)  
                 把另一个集合的数据添加到指定的集合中,如果两个集合中存在相同的key值,
                 那么会跟put方法一样,但是没有返回值
         
         删除:
             clear()         清空集合
             remove(Object key)   根据键删除数据,并返回此key所对应的value(因为键值不允许重复)
         
         判断:
             containsKey(Object key)   根据key判断集合中是否存在指定的键值对
            containsValue(Object value)  根据value判断集合中是否存在指定的键值对
            isEmpty()            判断集合是否为空
            
        获取:
            get(Object key)  根据键获取对应的值
            size()      判断集合中键值对的大小

        迭代:
            values()   返回此映射中包含的值的 Collection 视图
            keySet()   返回此映射中包含的键的 Set 视图
            entrySet()  返回此映射中包含的映射关系的 Set 视图。

    下面是一些方法的实例

    put(K key, V value) 

    添加的时候,如果不存在添加的key值,那么添加成功后返回null
    如果存在添加的key值,那么会替换原先的value值,并返回原来的value

    public static void main(String[] args) {
            
            Map<String, String> map = new HashMap<String, String>();
            String old = map.put("老公", "老婆");
            System.out.println(old);
            System.out.println(map);
            //修改后
            String news = map.put("老公", "小三");
            System.out.println(news);
            System.out.println(map);
        }

    putAll(Map<? extends K,? extends V> m)  
    把另一个集合的数据添加到指定的集合中,如果两个集合中存在相同的key值,
    那么会跟put方法一样,但是没有返回值

    public class Demo6 {
        public static void main(String[] args) {
            
            Map<String, String> map1 = new HashMap<String, String>();
            String old = map1.put("老公", "小三");
            
            Map<String, String> map2 = new HashMap<String, String>();
            String news = map2.put("老公", "老婆");
            System.out.println("添加前:"+map2);
            //把map1添加到map2中
            map2.putAll(map1);
            System.out.println("添加后:"+map2);
        }
    }

  • 相关阅读:
    deepsort+yolov3实现多类别多目标跟踪
    WAR2020暑期补题集
    【数据结构】浅谈主席树
    Github本地上传命令
    【蓝桥杯】2017年第八届蓝桥杯C/C++B组省赛——C题 承压计算
    【蓝桥杯】2017年第八届蓝桥杯C/C++B组省赛——B题 等差素数列
    【蓝桥杯】2019年第十届蓝桥杯C/C++ B组省赛——I题 后缀表达式
    防御Mimikatz-转载
    SQL注入之判断数据库
    XPATH注入
  • 原文地址:https://www.cnblogs.com/zjdbk/p/9010254.html
Copyright © 2011-2022 走看看