java-----Map集合

一、Map 接口

 

  1. map 概述:key--->value 的映射关系,是以键值对的方式存储

  2. Map:是一种两个集合之间的一个映射关系,Map 并没有继承 Collection 接口

    • key 是不可以重复

    • value 是可以重复的

  3. Map 最常用的实现类:

    • HashTable

    • HashMap

    • LinkedHashMap

    • Properties

    • ConcurrentHashMap

  4. map 常用的方法

    int size();
    //判断某一个key 是否存在
    boolean containsKey(Object key);
    //获取元素值
    V get(Object key);
    //设置值
    V put(K key, V value);
    //删除某一个key 的值
    V remove(Object key);
    //获取所有的key
     Set<K> keySet();
    //获取所有的value
    Collection<V> values();
    //获取键值对对象
    Set<Map.Entry<K, V>> entrySet();

 

二、HashMap

 

  1. put 方法的实现原理

    public V put(K key, V value) {
        return putVal(hash(key), key, value, false, true);
    }
    ​
    hash(key);
    ​
    Node<K,V> 单向的
        
    TreeNode<K,V>
  2. get 方法原理

    hash(key)//先找hash表中的位置
    //判断是treeNode,如果是使用红黑树算法寻找value,不是使用链表遍历
    treeNode 算法,使用hash 往左节点或者右节点直接找。
        
    遍历链表,判断hash 的同时,去判断 key 值
    ​

     

  3. 使用

    • key --- String

    • value 无所谓

    • 注意,存String 类型无所谓,存对象类型,需要重写equals 方法和 hashCode();

      Map<Student,String> mapStu = new HashMap<>();
      mapStu.put(new Student(10),"sy");
      mapStu.put(new Student(12),"zs");
      mapStu.put(new Student(13),"ls");
      mapStu.put(new Student(10),"zz");
      ​
      Set<Map.Entry<Student, String>> entries = mapStu.entrySet();
      System.out.println(entries);
      for (Map.Entry<Student, String> entry : entries) {
          System.out.println(entry.getKey());
          System.out.println("-----");
          System.out.println(entry.getValue());
      }
    • 嵌套使用

 

三、LinkedHashMap

 

  1. 记录添加顺序,key 不允许重复,判断 key 是否重复和 HashMap 标准一致

 

四、HashTable

HashTable:和HashMap 几乎一致,它是线程安全的,被HashMap 所替代了。采用hash表算法,所有的方法synchronized修饰符修饰,性能低一点。

五、TreeMap

  1. 采用红黑树算法,里面的key 会按照自然顺序(不自己指定排序规则)自动排序,或者定制排序,可以不能重复,key 判断重复的标准,Comparator compare 的返回值判断

    • 返回值 = 0

    • 返回值 > 0 升序 ASC

    • 返回值 < 0 降序 DESC

  2. 需求:计算一个字符串中字符出现的次数 "fwihfiwehfihewifhiaufiuhailfawigfuauekgfweufuiwegfieuw",并按照 a b c 的方式排序;

    String str = "fwihfiwehfihewifhiaufiuhailfawigfuauekgfweufuiwegfieuw";
    char[] chars = str.toCharArray();
    Map<Character,Integer> map = new TreeMap<>();
    for (char aChar : chars) {
        //如果从map 里面找不到,说明没值
        if(map.get(aChar) == null ){
            map.put(aChar,1);
        }else{
            Integer integer = map.get(aChar);
            map.put(aChar,++integer);
        }
    }
    ​
    System.out.println(map);

  3. 排序源码

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值