首页 > 其他 > 详细

Map接口

时间:2020-07-28 22:54:08      阅读:123      评论:0      收藏:0      [点我收藏+]

Map接口

存储双列数据,存储key-value对的数据,类似于函数y = f(x)

Map接口继承树

技术分享图片

实现类

  • Map
    • HashMap
      • LinkedHashMap
    • TreeMap
    • Hashtable
      • Properties

说明

  1. HashMap:作为Map的主要实现类,线程不安全,效率高,可以存储null的key和value

  2. LinkedHashMap:保证在遍历map元素时,可以按照添加的顺序实现遍历。对于频繁的遍历操作,此类的执行效率高于HashMap

    原因:在原有的HashMap底层结构的基础上,添加了一对指针,指向前一个和后一个元素

  3. TreeMap:保证按照添加的key-value对进行排序,实现排序遍历,此时考虑key的自然排序或定制排序(底层使用红黑树)

  4. Hashtable:作为古老的实现类,线程安全,效率低,不可以存储null的key和value

  5. Properties:常用来处理配置文件。key和value都是String类型

HashMap底层

  • jdk7:数组 + 链表
  • jdk8:数组 + 链表 + 红黑树

Map结构的理解

技术分享图片

  • key:无序的,不可重复的,使用Set存储所有的key

    在HashMap中,要求key所在的类要重写equals()和hashCode()

  • value:无序的,可重复的

    value所在类要求重写equals()

  • Entry:一个键值对(key - value)构成一个entry对象,key和value相当于两个属性

    无序的,不可重复的,使用Set存储所有的entry

Map中常用的方法

  1. put(Object key , Object value)

    将指定的key-value添加到(或修改)当前map对象中

    HashMap map = new HashMap();
    //添加操作
    map.put("AA",123);
    map.put("BB",79);
    map.put("CC",56);
    map.put("DD",123);
    //修改操作
    map.put("AA",87);//现有的key相同,就要替换原key中的值为新的value值
    
    System.out.println(map);
    

    技术分享图片

  2. putAll(Map m)

    将m中所有的key-value对存放在当前的map中

    HashMap m = new HashMap();
    map.put("Ann",90);
    map.put("Jack",80);
    map.put("Lisa",70);
    
    map.putAll(m);
    System.out.println(map);//{AA=87, BB=79, CC=56, DD=123, Ann=90, Jack=80, Lisa=70}
    
  3. remove(Object key)

    移除指定key的key-value对,并返回value

    System.out.println(map.remove("Ann"));//90
    System.out.println(map);//{AA=87, BB=79, CC=56, DD=123, Jack=80, Lisa=70}
    
  4. clear()

    清空当前map中所有的数据,与map = null 操作不同

    数据清理掉,对象依旧存在

    此时map的长度为0

    map.clear();
    System.out.println(map);//{}
    
  5. get(Object key)

    获取指定key对应的value

    HashMap map = new HashMap();
    map.put("AA",123);
    map.put("BB",79);
    map.put("CC",56);
    map.put("DD",123);
    
    System.out.println(map.get("AA"));//123
    
  6. containKey(Object key)

    是否包含指定的key

    System.out.println(map.containsKey("AA"));//true
    
  7. containValue(Object value)

    是否包含指定的value

    如果map中有多个相同的value,只要找到第一个,就会返回true

    System.out.println(map.containsValue(123));//true
    
  8. size()

    返回map中key-value对的个数

    System.out.println(map.size());//4
    
  9. isEmpty()

    判断当前map是否为空

    System.out.println(map.isEmpty());//false
    
  10. equals(Object obj)

    判断当前map和参数对象obj是否相等

    HashMap map1 = new HashMap();
    map1.put("AA",123);
    map1.put("BB",79);
    map1.put("CC",56);
    map1.put("DD",123);
    
    System.out.println(map.equals(map1));//true
    
  11. keySet()

    返回所有的key构成的Set集合

    HashMap map = new HashMap();
    map.put("AA",123);
    map.put("BB",79);
    map.put("CC",56);
    map.put("DD",123);
    
    System.out.println(map.keySet());//[AA, BB, CC, DD]
    
    Set set = map.keySet();
    Iterator iterator = set.iterator();
    while (iterator.hasNext()){
        System.out.println(iterator.next());
    }
    
  12. values()

    遍历所有的value集

    Collection values = map.values();
    Iterator iterator1 = values.iterator();
    while (iterator1.hasNext()){
        System.out.println(iterator1.next());
    }
    //123
    //79
    //56
    //123
    
  13. entrySet()

    遍历所有的key-value

    entrySet集合中的元素都是entry

    Set set1 = map.entrySet();
    Iterator iterator2 = set1.iterator();
    while (iterator2.hasNext()){
        System.out.println(iterator2.next());
    }
    

    技术分享图片

总结

  1. 添加:put(Object key , Object value)
  2. 删除:remove(Object key)
  3. 修改:put(Object key , Object value)
  4. 查询:get(Object obj)
  5. 长度:size()
  6. 遍历:keySet()/values()/entrySet()

Map接口

原文:https://www.cnblogs.com/CrabDumplings/p/13393014.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!