• Map集合


     

     Map集合概述

      存储键值对应关系的数据,也就是映射关系。
    Map集合特点
      Map  集合中不能存在相同的键,一个键只能对应一个值,键相同值覆盖。
      Map 集合的数据结构 只跟键有关 ,跟值无关。
      基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。

    了解Map集合,Map集合有哪些实现

    hashMap

    hashTable

    LinkedHashMap

    TreeMap

    ConcurrentHashMap

    HashMap和HashTable的区别

      HashMap不是线程安全的,HashTable是线程安全的一个Collection。
      HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
      HashMap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。
      HashMap允许null key和null value,而hashtable不允许。
      HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
      HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
      Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
    最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问
      Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
      Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

    .hashCode()和equals()方法使用场景

      hashCode():顶级父类object当中的方法,返回值类型为int类型的值,根据一定的规则生成一个数组,数组保存的就是hash值;

      equals():顶级父类object当中的方法,根据一定的比较规则,判断对象是否一致;

      底层一般逻辑:

        1.判断两个对象的内存地址是否一样;

        2.非空判断和class类型判断;

        3.强转;

        4.对象中的字段一一匹配;

    public class Title {
        private int id;
        private String name;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public boolean equals(Object o) {
            //判断两个对象的内存地址是否一样
            if (this == o) return true;
            //非空判断和class类型判断
            if (o == null || getClass() != o.getClass()) return false;
            //强转
            Title title = (Title) o;
            //对象中的字段一一匹配
            return id == title.id &&
                    Objects.equals(name, title.name);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(id, name);
        }
    }

    HashMap和TreeMap应该如何选择

      HashMap:

      底层采用数组+链表结构,可以实现快速的存储和检索,但是数据时无序的,适用于在map当中插入删除或者获取元素;

      TreeMap:

      存储结构是一个平衡二叉树,具体实现方式为红黑树,默认采用自然排序,可以自定义排序规则,但是需要实现Comparator,能够便捷的实现内部元素的各种排序,但是性能比HashMa差,适用于按照具体自然排序和自定义排序规则;

    Set和Map的关系

      Map是一组键值对的结构,具有极快的查找速度;

      Set核心就是保存不重复的元素,存储一组唯一的对象;

      Set当中每一种实现都对应Map;

      HashSet对应的底层就是new HashMap,TreeSet对应的底层就是new TreeMap;

    常见的Map排序规则

      按照添加规则使用LinkedHashMap,按照自然排序使用TreeMap;

    如何保证Map线程安全

      多线程环境下,可以使用concurrent包下有一个ConcurrentHashMap,它使用分段锁来保证线程安全;

      Collections.synchronizedMap保证线程安全,效率比HashTable高;

  • 相关阅读:
    xinetd编程
    我是这样学习Linux下C语言编程的编译命令gcc的使用
    Linux man命令的使用方法
    string.Format出现异常"输入的字符串格式有误"的解决方法
    .net 发送邮件
    cross join
    解决ASP.NET中的各种乱码问题
    网站推广优化教程100条(SEO,网站关键字优化,怎么优化网站,如何优化网站关键字)
    网页中嵌入Excel控件
    C#基础之 集合队列
  • 原文地址:https://www.cnblogs.com/dabrk/p/12508791.html
Copyright © 2020-2023  润新知