Map集合 一.了解Map集合吗?Map集合都有哪些实现  二.HashMap和HashTable之间的区别 三.hashCode()和equals()方法使用场景 四.HashMap和TreeMap应该如何选择  五.Set和Map的关系 六.常见的Map排序规则 七.如何保证Map线程安全

  1.HashMap

  2.HashTable

  3.LinkedHashMap

  4.TreeMap

  5.ConcurrentHashMap

二.HashMap和HashTable之间的区别

    1.HashMap:底层基于数组+单向链表(红黑树),非线程安全,默认容量为16,允许有空的键和值

          Map集合
一.了解Map集合吗?Map集合都有哪些实现 
二.HashMap和HashTable之间的区别
三.hashCode()和equals()方法使用场景
四.HashMap和TreeMap应该如何选择 
五.Set和Map的关系
六.常见的Map排序规则
七.如何保证Map线程安全

          数组:Node<K,V> [] table ,每一个元素都是一个Node
          单向链表:Node<K,V> next,当发生Hash碰撞,会追加链表,当链表长度大于8,

          那就转换为红黑树
    2.HashTable:底层基于哈希表实现,线程是安全的,默认容量为11,不允许有空的键和值

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

    hashCode():

        *父类Object当中的方法,返回值类型为int类型的值,根据一定的规则(存储地址,字段,长

        度等等)生成一个数组,数据保存的就是Hash值

    equals():

        *类Object中的方法,根据一定的比较规则,判断对象是否一致,底层一般逻辑:
                    1.判断两个对象的内存地址是否一样
                    2.非空判断和Class类型判断
                    3.强转
                    4.对象中的字段一一匹配

    

Map集合
一.了解Map集合吗?Map集合都有哪些实现 
二.HashMap和HashTable之间的区别
三.hashCode()和equals()方法使用场景
四.HashMap和TreeMap应该如何选择 
五.Set和Map的关系
六.常见的Map排序规则
七.如何保证Map线程安全
public class UserInfo {
    private  Integer uid;
    private String uname;

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer uid) {
        this.uid = uid;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    //重写HashCode
    @Override
    public int hashCode(){
        return Objects.hash(uid,uname);
    }

    //重写equals
    @Override
    public  boolean equals(Object obj){
        //潘丹 两个对象对峙是否一致
        if (this==obj){
            return true;
        }
        //非空判断和class类类型判断
        if (obj==null||obj.getClass()!=getClass()){
            return false;
        }
        //强转
        UserInfo info=(UserInfo)obj;
        //判断对象字段值是否都是一致的
        return uid==info.uid && Objects.equals(uname,((UserInfo)obj).uname);
    }
    
}
Map集合
一.了解Map集合吗?Map集合都有哪些实现 
二.HashMap和HashTable之间的区别
三.hashCode()和equals()方法使用场景
四.HashMap和TreeMap应该如何选择 
五.Set和Map的关系
六.常见的Map排序规则
七.如何保证Map线程安全

四.HashMap和TreeMap应该如何选择 

   HashMap:

      底层采用数组+链表(红黑树)结构,可以实现快速的存储和检索,但是数据是无序的,

      适用于在Map当中插入删除或者获取元素

    TreeMap:

       存储结构是一个平衡二叉树,具体实现方式为红黑树,默认采用自然排序,

      可以自定义排序规则,但是需要实现Comparator接口
      能够便捷的实现内部元素的各种排序,但是性能比HashMap差,适用于按照自然排序和自定义排序规则

五.Set和Map的关系

    Set核心就是保存不重复的元素,存储一组唯一的对象
    set当中每一种实现都对应Map
    HashSet对应的HashMap,TreeSet对应的TreeMap

    进入HashSet源码

    Map集合
一.了解Map集合吗?Map集合都有哪些实现 
二.HashMap和HashTable之间的区别
三.hashCode()和equals()方法使用场景
四.HashMap和TreeMap应该如何选择 
五.Set和Map的关系
六.常见的Map排序规则
七.如何保证Map线程安全

    底层实际上是创建 了一个HashMap集合

     Map集合
一.了解Map集合吗?Map集合都有哪些实现 
二.HashMap和HashTable之间的区别
三.hashCode()和equals()方法使用场景
四.HashMap和TreeMap应该如何选择 
五.Set和Map的关系
六.常见的Map排序规则
七.如何保证Map线程安全

    进入HashMap源码

    Map集合
一.了解Map集合吗?Map集合都有哪些实现 
二.HashMap和HashTable之间的区别
三.hashCode()和equals()方法使用场景
四.HashMap和TreeMap应该如何选择 
五.Set和Map的关系
六.常见的Map排序规则
七.如何保证Map线程安全

     实际上HashMap底层调用的是Set

    Map集合
一.了解Map集合吗?Map集合都有哪些实现 
二.HashMap和HashTable之间的区别
三.hashCode()和equals()方法使用场景
四.HashMap和TreeMap应该如何选择 
五.Set和Map的关系
六.常见的Map排序规则
七.如何保证Map线程安全

六.常见的Map排序规则

    按照添加规则使用LinkedHashMap,按照自然排序或者自定义规则排序可以采用TreeMap

七.如何保证Map线程安全

    多线程环境下,可以使用concurrent包下有一个ConcurrentHashMap或者是使用

    Collections.synchronizedList(newHashMap<K,V>());

  Map集合
一.了解Map集合吗?Map集合都有哪些实现 
二.HashMap和HashTable之间的区别
三.hashCode()和equals()方法使用场景
四.HashMap和TreeMap应该如何选择 
五.Set和Map的关系
六.常见的Map排序规则
七.如何保证Map线程安全

  ConcurrentHashMap保证线程安全,效率比HashTable高,采分段锁

  Map集合
一.了解Map集合吗?Map集合都有哪些实现 
二.HashMap和HashTable之间的区别
三.hashCode()和equals()方法使用场景
四.HashMap和TreeMap应该如何选择 
五.Set和Map的关系
六.常见的Map排序规则
七.如何保证Map线程安全