Java进阶核心之集合框架Map

Java进阶核心之集合框架Map

  • 什么是Map数据结构
    • 底层就是⼀个数组结构,数组中的每⼀项⼜是⼀个链表,即数组和链表的结合体
    • Table是数组,数组的元素是Entry
    • Entry元素是⼀个key-value键值对,它持有⼀个指向下⼀个 Entry元素的引⽤,table数组的
    • 每个Entry元素同时也作为当前Entry链表的⾸节点,也指向了该链表的下⼀个Entry元素
      在这里插入图片描述
  • 常见的实现类
    • HashMap
      • ⼀个散列桶(数组和链表),它存储的内容是键值对(key-value)映射
      • 是基于hashing的原理,使⽤put(key, value)存储对象到HashMap中,使⽤get(key)从HashMap中获取对象。当put()⽅法传递键和值时,会先对键调⽤hashCode()⽅法,计算并返回的hashCode是⽤于找到Map数组的bucket位置来储存Entry对象的,是⾮线程安全的,所以HashMap操作速度很快
    • TreeMap
      • 在数据的存储过程中,能够⾃动对数据进⾏排序,实现了SotredMap接口,它是有序的集合
      • TreeMap使⽤的存储结构是平衡⼆叉树,也称为红⿊树
      • 默认排序规则:按照key的字典顺序来排序(升序),也可以⾃定义排序规则,要实现Comparator接口
  • 常见Map API语法
Map<String,String> map = new HashMap<>();
//往map⾥⾯放key - value;
map.put("⼩明","⼴东⼴州");
map.put("⼩东","⼴东深圳");
//根据key获取value
map.get("⼩东");
//判断是否包含某个key
map.containsKey("⼩明");
//返回map的元素数量
map.size();
//清空容器
map.clear();
//获取所有value集合
map.values();
//返回所有key的集合
map.keySet()
//返回⼀个Set集合,集合的类型为Map.Entry , 是Map声明的⼀个内部接⼝,接⼝为泛型,定
义为Entry<K,V>//它表示Map中的⼀个实体(⼀个key-value对),主要有getKey(),getValue⽅法
Set<Map.Entry<String,String>> entrySet = map.entrySet();
//判断map是否为空
map.isEmpty();
  • Map面试题
    • HashMap和TreeMap应该怎么选择
      • HashMap可实现快速存储和检索,但缺点是包含的元素是⽆序的,适⽤于在Map中插⼊、删除和定位元素.
      • TreeMap能便捷的实现对其内部元素的各种排序,但其⼀般性能⽐HashMap差,适⽤于按⾃然顺序或⾃定义顺序遍历键(key)
    • jdk1.7和jdk1.8中HashMap的主要区别
      • 底层实现由之前的 “数组+链表” 改为 “数组+链表+红⿊树”
    • 什么时候开始转变
      • 当链表节点较少时仍然是以链表存在,当链表节点较多时,默认是⼤于8时会转为红黑树

在这里插入图片描述

package domee.chapter8;

import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class MapTest {
    
    
    public static void main(String[] args) {
    
    
        HashMap<String,String> map = new HashMap<>();
        //TreeMap<String,String> map = new TreeMap<>();
        map.put("小明","陕西西安");
        map.put("小红","四川成都");
        map.put("小绿","辽宁大连");
        System.out.println("此时map的大小是"+map.size());
        System.out.println("map的内容是"+map.toString());
        System.out.println("map的内容是"+map);
        System.out.println("map的value是"+map.values());
        System.out.println(map.get("小明"));
    }
}

猜你喜欢

转载自blog.csdn.net/ruan_luqingnian/article/details/113546651